JAVA設計模式一 建立型模式
一、設計模式的分類
總體來說設計模式分為三大類:
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。
其實還有兩類:併發型模式和執行緒池模式。用一個圖片來整體描述一下:
1工廠方法模式(Factory Method)
1.1 普通工廠模式。
就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖:
首先,建立二者的共同介面:
其次,建立實現類
最後建立工廠類:
public class SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
return new MailSender();
} else if ("sms".equals(type)) {
return new SmsSender();
} else {
System.out.println("請輸入正確的型別!");
return null;
}
}
}
測試方法:
public class FactoryTest {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produce("sms");
sender.Send();
}
}
輸出:this is sms sender!
22、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。關係圖:
輸出:this is sms sender!
22、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。關係圖:
將上面的程式碼做下修改,改動下SendFactory類就行,如下:
public class SendFactory {
public Sender produceMail(){
return new MailSender();
}
public Sender produceSms(){
return new SmsSender();
}
}
測試類如下:
public class FactoryTest {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produceMail();
sender.Send();
}
}
33、靜態工廠方法模式,將上面的多個工廠方法模式裡的方法置為靜態的,不需要建立例項,直接呼叫即可。
public class FactoryTest {
public static void main(String[] args) {
Sender sender = SendFactory.produceMail();
sender.Send();
}
}
輸出:this is mailsender!
總體來說,工廠模式適合:凡是出現了大量的產品需要建立,並且具有共同的介面時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字串有誤,不能正確建立物件,第三種相對於第二種,不需要例項化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。
2、抽象工廠模式(Abstract Factory)
工廠方法模式有一個問題就是,類的建立依賴工廠類,也就是說,如果想要擴充程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到抽象工廠模式,建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的程式碼。因為抽象工廠不太好理解,我們先看看圖,然後就和程式碼,就比較容易理解。
相關文章
- (Java)設計模式:建立型Java設計模式
- 聊一聊設計模式(二)-- 建立型設計模式設計模式
- PHP設計模式—建立型設計模式PHP設計模式
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 設計模式(一)建立型之單例模式設計模式單例
- 設計模式-建立型設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 設計模式-建立型-單例模式設計模式單例
- 【Java】設計模式--建立型模式Java設計模式
- 建立型設計模式——抽象工廠模式設計模式抽象
- 設計模式--建造者模式Builder(建立型)設計模式UI
- 設計模式--工廠模式Factory(建立型)設計模式
- 設計模式--原型模式Prototype(建立型)設計模式原型
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- C++設計模式建立型工廠模式C++設計模式
- 設計模式--單件模式Singleton(建立型)設計模式
- 建立型設計模式對比總結 設計模式(八)設計模式
- Java內功心法,建立型設計模式包括哪些Java設計模式
- 大話 PHP 設計模式--建立型PHP設計模式
- 物件導向-設計模式-建立型物件設計模式
- 設計模式-建立型-工廠方法設計模式
- (Java)設計模式:行為型Java設計模式
- (Java)設計模式:結構型Java設計模式
- 設計模式(三)----建立型模式之單例模式(一)設計模式單例
- 聊一聊設計模式(四)-- 行為型設計模式設計模式
- 聊一聊設計模式(三)-- 結構型設計模式設計模式
- 設計模式之建立型模式設計模式
- java設計模式其一 單例模式Java設計模式單例
- Java 設計模式(一)《介面卡模式》Java設計模式
- java設計模式之一 橋接模式Java設計模式橋接
- java設計模式之一 工廠模式Java設計模式
- Java設計模式——模板設計模式Java設計模式
- python--設計模式--4--建立型--工廠方法模式Python設計模式
- Golang 常用的五種建立型設計模式Golang設計模式
- 【設計模式(四)】建立型模式--原型模式設計模式原型
- 設計模式-建立型模式學習設計模式
- Java設計模式(一):設計模式概述、UML圖、設計原則Java設計模式