原廠模式精講

來源:互聯網
上載者:User

標籤:告訴   system   代碼   port   上進   abs   public   new   使用者   

原廠模式是一種建立性模式,提供的就是一種建立對象的方式,解決的就是使用者和產品之間的問題,隱藏生產產品的實現細節,使用者只需要關心最後的結果。官方的定義是:定義一個建立對象的介面,讓其子類自己決定執行個體化哪一個工廠類,原廠模式使其建立過程延遲到子類進行。

下面利用窮舉法舉幾個例子:

 1.使用者去汽車工廠買汽車,需要什麼汽車買什麼汽車,不用只要汽車的生產細節。

 2.咱們hibernate裡面設定資料庫選擇方言,配置什麼方法就出現什麼資料庫,隱藏了實現細節。

 3.咱們去小時買牛奶,選什麼牌子買什麼牌子,不用知道牛奶怎麼生產的。

簡單工廠
package pattern.factory;public interface Milk {    public String getName();}
package pattern.factory;public class MengNiu implements Milk {    @Override    public String getName() {        return "蒙牛";    }}
package pattern.factory;public class TeLunSu implements Milk {    @Override    public String getName() {        return "特侖蘇";    }}
package pattern.factory;public class YiLi implements Milk {    @Override    public String getName() {        return "伊利";    }}
import pattern.factory.TeLunSu;import pattern.factory.YiLi;public class SimpleFactory {     public  Milk getMilk(String name){         Milk milk=null;         if("特侖蘇".equals(name)){             milk=new TeLunSu();         }         if("蒙牛".equals(name)){             milk=new MengNiu();         }         if("伊利".equals(name)){             milk=new YiLi();         }         return milk;     }}
package pattern.factory.simple;public class SimpleFactoryTest {    public static void main(String[] args) {        //把使用者的需要的產品告訴工廠        //主要是隱藏產品的建立過程,使用者無需知道牛奶的建立過程        SimpleFactory simpleFactory=new SimpleFactory();        System.out.println(simpleFactory.getMilk("特侖蘇"));    }}

簡單工廠通過代碼看上去其實想一個小作坊的模式,什麼產品的牛奶都有,分工不是很明確,所有的產品共用一個工廠,而且方法需要一個參數手動的輸入,增加了出錯的機率。

Factory 方法
public class MengNiuFactory implements Factory {    @Override    public Milk getMilk() {        return new MengNiu();    }}
package pattern.factory.func;import pattern.factory.Milk;import pattern.factory.TeLunSu;public class TeLunSuFactory implements Factory {    @Override    public Milk getMilk() {        return new TeLunSu();    }}
package pattern.factory.func;import pattern.factory.Milk;import pattern.factory.YiLi;public class YiLiFactory implements Factory {    @Override    public Milk getMilk() {        return new YiLi();    }}
package pattern.factory.func;import pattern.factory.Milk;public interface Factory {    public Milk getMilk();}
package pattern.factory.func;public class FactoryTest {    public static void main(String[] args) {        Factory factory=new MengNiuFactory();        System.out.println(factory.getMilk());    }}

Factory 方法像是工廠式的模式生產,一個產品對應一個工廠然後進行組裝,這個比較規範,可以進行批量標準化規模化的生產,不過也可以看出使用者選擇產品有點不方便。

抽象工廠
package pattern.factory.abstr;import pattern.factory.Milk;public abstract class AbstractFactory {    public abstract Milk getTeLunSu();    public abstract Milk getYiLi();    public abstract Milk getMengNiu();}
package pattern.factory.abstr;import pattern.factory.Milk;import pattern.factory.func.MengNiuFactory;import pattern.factory.func.TeLunSuFactory;import pattern.factory.func.YiLiFactory;public class MilkFactory extends AbstractFactory {    @Override    public Milk getTeLunSu() {        return new TeLunSuFactory().getMilk();    }    @Override    public Milk getYiLi() {        return new YiLiFactory().getMilk();    }    @Override    public Milk getMengNiu() {        return new MengNiuFactory().getMilk();    }}
package pattern.factory.abstr;public class AbstractFactoryTest {    public static void main(String[] args) {        AbstractFactory abstractFactory=new MilkFactory();        abstractFactory.getMengNiu();    }}

個人感覺抽象工廠和Factory 方法其實很像,但是它在Factory 方法的基礎上進行了再次封裝,靈活性更好,使用者可以隨便選取自己想要的產品,同時也體現了代碼的擴充性,抽象工廠的好處也比介面要好,因為抽象類別裡面可以處理一下都可以用到的邏輯代碼,寫一些方法,看著有點像流水線的模式,一條線生產一個產品。

原廠模式精講

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.