Java修煉之道--設計模式

原做地址:https://github.com/frank-lam/2019_campus_applyhtml

1、概述

一、設計模式是人們在面對同類型軟件工程設計問題所總結出的一些有用經驗。模式不是代碼,而是某類問題的通用設計解決方案java

二、4人組Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides總結寫了《設計模式》git

三、設計模式的優勢和用途github

四、學習設計模式最好的方式:在你的設計和以往的工程裏尋找何處可使用它們算法

五、設計模式的本質目的是使軟件工程在維護性、擴展性、變化性、複雜度方面成O(N)設計模式

六、OO(Object Oriented)是原則,設計模式是具體方法、工具api

設計模式怎麼分類,每一類都有哪些?【螞蟻金服內推】

設計模式怎麼用到項目中?【阿里面經】

2、設計模式

單例模式

工廠模式

觀察者模式

適配器模式(Adapter)

2018/7/15安全

意圖

把一個類接口轉換成另外一個用戶須要的接口。適配器模式讓那些接口不兼容的類能夠一塊兒工做oracle

img

類型

適配器模式的別名爲包裝器(Wrapper)模式,它既能夠做爲類結構型模式,也能夠做爲對象結構型模式。在適配器模式定義中所說起的接口是指廣義的接口,它能夠表示一個方法或者方法的集合。app

  • 對象適配器:(傳入對象)組合方式,可是更靈活推薦使用這種方式
  • 類適配器:(多重繼承)繼承方式,效率更高

類圖

img

實現

鴨子(Duck)和火雞(Turkey)擁有不一樣的叫聲,Duck 的叫聲調用 quack() 方法,而 Turkey 調用 gobble() 方法。

要求將 Turkey 的 gobble() 方法適配成 Duck 的 quack() 方法,從而讓火雞冒充鴨子!

public interface Duck {
    void quack();
}
public interface Turkey {
    void gobble();
}
public class WildTurkey implements Turkey {
    @Override
    public void gobble() {
        System.out.println("gobble!");
    }
}
public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }
}
public class Client {
    public static void main(String[] args) {
        Turkey turkey = new WildTurkey();
        Duck duck = new TurkeyAdapter(turkey);
        duck.quack();
    }
}

JDK

模仿方法模式

策略模式(Strategy)

2018/7/11

意圖

  • 定義一系列算法,封裝每一個算法,並使它們能夠互換。
  • 策略模式可讓算法獨立於使用它的客戶端。

類圖

  • Strategy 接口定義了一個算法族,它們都具備 behavior() 方法。
  • Context 是使用到該算法族的類,其中的 doSomething() 方法會調用 behavior(),setStrategy(in Strategy) 方法能夠動態地改變 strategy 對象,也就是說能動態地改變 Context 所使用的算法。

img

與狀態模式的比較

狀態模式的類圖和策略模式相似,而且都是可以動態改變對象的行爲。

可是狀態模式是經過狀態轉移來改變 Context 所組合的 State 對象,而策略模式是經過 Context 自己的決策來改變組合的 Strategy 對象。

所謂的狀態轉移,是指 Context 在運行過程當中因爲一些條件發生改變而使得 State 對象發生改變,注意必需要是在運行過程當中。

狀態模式主要是用來解決狀態轉移的問題,當狀態發生轉移了,那麼 Context 對象就會改變它的行爲;而策略模式主要是用來封裝一組能夠互相替代的算法族,而且能夠根據須要動態地去替換 Context 使用的算法。

實現

設計一個鴨子,它能夠動態地改變叫聲。這裏的算法族是鴨子的叫聲行爲。

public interface QuackBehavior {
    void quack();
}
public class Quack implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("quack!");
    }
}
public class Squeak implements QuackBehavior{
    @Override
    public void quack() {
        System.out.println("squeak!");
    }
}
public class Duck {
    private QuackBehavior quackBehavior;

    public void performQuack() {
        if (quackBehavior != null) {
            quackBehavior.quack();
        }
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
public class Client {
    public static void main(String[] args) {
        Duck duck = new Duck();
        duck.setQuackBehavior(new Squeak());
        duck.performQuack();
        duck.setQuackBehavior(new Quack());
        duck.performQuack();
    }
}
squeak!
quack!

JDK

  • java.util.Comparator#compare()
  • javax.servlet.http.HttpServlet
  • javax.servlet.Filter#doFilter()

責任鏈模式

裝飾者模式

迭代器模式(Iterator)

2018/7/16

反應器模式

  1. 經常使用的八種掌握就行,原理,使用
  2. 單例、工廠、觀察者重點

所瞭解的設計模式,單例模式的注意事項,jdk源碼哪些用到了你說的設計模式

  • 所瞭解的設計模式
    • 工廠模式:定義一個用於建立對象的接口,讓子類決定實例化哪個類, Factory Method 使一個類的實例化延遲到了子類。
    • 單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點;
    • 適配器模式:將一類的接口轉換成客戶但願的另一個接口,Adapter 模式使得本來因爲接口不兼容而不能一塊兒工做那些類能夠一塊兒工做。
    • 裝飾者模式:動態地給一個對象增長一些額外的職責,就增長的功能來講, Decorator 模式相比生成子類更加靈活。
    • 代理:爲其餘對象提供一種代理以控制對這個對象的訪問
    • 迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不須要暴露該對象的內部表示。
  • 單例模式的注意事項
    • 儘可能使用懶加載
    • 雙重檢索實現線程安全
    • 構造方法爲private
    • 定義靜態的Singleton instance對象和getInstance()方法
  • jdk源碼中用到的設計模式
    • 裝飾器模式:IO流中
    • 迭代器模式:Iterator
    • 單利模式: java.lang.Runtime
    • 代理模式:RMI

3、設計模式常見問題

1.什麼是高內聚,低耦合?

附錄:參考資料

卡奴達摩的專欄 - CSDN博客
https://blog.csdn.net/zhengzhb/article/category/926691/1

單例模式 - 23種設計模式 - 極客學院Wiki
http://wiki.jikexueyuan.com/project/java-design-pattern/singleton-pattern.html

https://www.bilibili.com/video/av18569541/

hexter 錄製的課程 - 極客學院【23種設計模式】
http://my.jikexueyuan.com/hexter/record/

設計模式之禪

相關文章
相關標籤/搜索