[设计模式]工厂模式factory
參考:http://wxg6203.iteye.com/blog/740229
?
簡單工廠模式(simple factory)是類的創建模式,又叫靜態工廠方法(static factory method)模式。
簡單工廠模式就是由一個工廠類根據傳入的參數決定創建哪一種的產品類。
?
有4個角色
?
工廠類角色:是具體產品類角色直接調用者。?
抽象產品角色:接口或抽象類,負責具體產品角色的定義,及與客戶端的交互。?
具體產品角色:被工廠類創建的對象,也是客戶端實際操作對象。?
客戶端:調用工廠類產生實例,并調用實例的方法進行相應工作。
?
public interface people{public void say();}public class chinese implements people{public void say(){System.out.println("說中國話");}}public class american implements people{public void say(){System.out.println("speak english");}}public class peopleFactory{public static people create(int type){if(type==1){return new chinese();}else if(type==2){return new american();}}}public class test{public static void main(String []args){people p=peopleFactory.create(1);p.say();p=peopleFactory.create(2);p.say();}}?
?
?
?
工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。
首先完全實現‘開-閉 原則’,實現了可擴展。其次更復雜的層次結構,可以應用于產品結果復雜的場合。
工廠方法模式的對簡單工廠模式進行了抽象。有一個抽象的Factory類(可以是抽象類和接口),這個類將不在負責具體的產品生產,而是只制定一些規范,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即一個抽象工廠對應一個抽象產品,一個具體工廠對應一個具體產品,這個具體的工廠就負責生產對應的產品。
工廠方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)應用。
?
?如圖:
?
?
基于面向接口編程的原理,創建部分成為抽象工廠與實體工廠,創建出的對象成為抽象產品與實體產品。你可能知道為什么它能解決上面的問題了:多了一個新對象,只需添加一套對應的工廠和產品就可以了,不需要修改原代碼,或只需進行少量的修改。
?
具體:
實體工廠實現抽象工廠,實體產品實現抽象產品;抽象工廠生產抽象產品,實體工廠生產實體產品;實體工廠A生產實體產品A,實體工廠B生產實體產品B。
?
public interface Icar{public void docar();}public class bwm implements Icar{public void docar(){System.out.println("我是寶馬,別摸我");}}public class buick implements Icar{public void docar(){System.out.println("我是別克,很酷");}}public interface Icarfactory{public Icar createCar();} public class bmwFactory implements Icarfactory{public Icar createCar(){return new bwm();}} public class buickFactory implements Icarfactory{public Icar createCar(){return new buick();}} public class test{public static void main(String []args){Icarfactory factory=new bmwFactory();Icar bwm= factory.createCar(); bwm.docar();factory=new buickFactory();Icar buick= factory.createCar(); buick.docar();}}?
抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。
抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創建多個產品族中的產品對象。根據LSP原則,任何接受父類型的地方,都應當能夠接受子類型。因此,實際上系統所需要的,僅僅是類型與這些抽象產品角色相同的一些實例,而不是這些抽象產品的實例。換言之,也就是這些抽象產品的具體子類的實例。工廠類負責創建抽象產品的具體子類的實例。
?
簡介
??? ?當每個抽象產品都有多于一個的具體子類的時候,工廠角色怎么知道實例化哪一個子類呢?比如每個抽象產品角色都有兩個具體產品。抽象工廠模式提供兩個具體工廠角色,分別對應于這兩個具體產品角色,每一個具體工廠角色只負責某一個產品角色的實例化。每一個具體工廠類只負責創建抽象產品的某一個具體子類的實例。
每一個模式都是針對一定問題的解決方案,工廠方法模式針對的是一個產品等級結構;而抽象工廠模式針對的是多個產品等級結果。
轉載于:https://www.cnblogs.com/lyggqm/p/7098698.html
總結
以上是生活随笔為你收集整理的[设计模式]工厂模式factory的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动Nginx 出现 nginx: [e
- 下一篇: 0069 如何在Intellij IDE