23中設計模式

1、23種設計模式

java的設計模式大致上分爲三大類:

  • 建立型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。
  • 結構型模式(7種):適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。
  • 行爲型模式(11種):策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

設計模式遵循的原則有6個:

一、開閉原則(Open Close Principle)html

  對擴展開放,對修改關閉java

二、里氏代換原則(Liskov Substitution Principle)編程

  只有當衍生類能夠替換掉基類,軟件單位的功能不受到影響時,基類才能真正被複用,而衍生類也可以在基類的基礎上增長新的行爲。設計模式

三、依賴倒轉原則(Dependence Inversion Principle)ide

  這個是開閉原則的基礎,對接口編程,依賴於抽象而不依賴於具體。函數

四、接口隔離原則(Interface Segregation Principle)工具

  使用多個隔離的藉口來下降耦合度。spa

五、迪米特法則(最少知道原則)(Demeter Principle)設計

  一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。3d

六、合成複用原則(Composite Reuse Principle)

  原則是儘可能使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。

2、經常使用設計模式

1. 工廠模式(Factory Method)

  經常使用的工廠模式是靜態工廠,利用static方法,做爲一種相似於常見的工具類Utils等輔助效果,通常狀況下工廠類不須要實例化。

  總結:理解爲一個工廠,若是要製造一個產品,只須要輸入這個產品的相關參數,這個工廠就能夠把這個產品生產出來,不須要知道工廠內部是如何是製造的。

interface food{}

class A implements food{}
class B implements food{}
class C implements food{}

public class StaticFactory {

    private StaticFactory(){}  //私有構造函數
    
    public static food getA(){  return new A(); }
    public static food getB(){  return new B(); }
    public static food getC(){  return new C(); }
}

class Client{
    //客戶端代碼只須要將相應的參數傳入便可獲得對象
    //用戶不須要了解工廠類內部的邏輯。
    public void get(String name){
        food x = null ;
        if ( name.equals("A")) {
            x = StaticFactory.getA();
        }else if ( name.equals("B")){
            x = StaticFactory.getB();
        }else {
            x = StaticFactory.getC();
        }
    }
}
工廠模式

2. 抽象工廠模式(Abstract Factory)

  一個基礎接口定義了功能,每一個實現接口的子類就是產品,而後定義一個工廠接口,實現了工廠接口的就是工廠,這時候,接口編程的優勢就出現了,咱們能夠新增產品類(只須要實現產品接口),只須要同時新增一個工廠類,客戶端就能夠輕鬆調用新產品的代碼。

  抽象工廠的靈活性就體如今這裏,無需改動原有的代碼,畢竟對於客戶端來講,靜態工廠模式在不改動StaticFactory類的代碼時沒法新增產品,若是採用了抽象工廠模式,就能夠輕鬆的新增拓展類。

interface food{}  //基類,定義了具體的產品該擁有的方法

class A implements food{}
class B implements food{}

//比工廠模式在這裏多加了一個接口,直接獲取產品基類
interface produce{ food get();}

class FactoryForA implements produce{
    @Override
    public food get() {
        return new A();
    }
}
class FactoryForB implements produce{
    @Override
    public food get() {
        return new B();
    }
}
public class AbstractFactory {
    public void ClientCode(String name){
        food x= new FactoryForA().get();
        x = new FactoryForB().get();
    }
}
抽象工廠模式

三、單例模式

http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html

https://www.cnblogs.com/wmbg/p/6943878.html

相關文章
相關標籤/搜索