設計模式筆記(2)

球球笨發表於2018-05-27

工廠方法模式

簡單工廠類

簡單工廠模式屬於建立型模式,又稱靜態工廠方法(Static factory method)模式。其是由一個工廠物件決定建立出哪一種產品類的例項,可理解為不同工廠模式的一個特殊實現。

public class BreadFactory {
    public static BreadMaker MakeBread(int breadType) { 
        BreadMaker breadMaker = null;
        switch(breadType)
        {
            case1 : 
                breadMaker = new BlackBread();
            case2 :
                breadMaker = new HoneyBread();
               ........
        }
        return breadMaker;
    }
}

上述程式碼對於修改開放了,違反了開放封閉原則。故而引出工廠方法模式,去解決這樣的矛盾。

GOF對於工廠方法模式的定義是:“定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使得一個類的例項化被延遲到其子類。”
具體實現程式碼如下

public class BreadMaker
{
    public void GetBread()
    {
    }
}
public class BlackBread extends BreadMaker{
    @override
    public void GetBread()
    {
       "黑麵包"
    }
}

public class HoneyBread extends BreadMaker{
    @override
    public void GetBread()
    {
       "蜂蜜麵包"
    }
}

public class WhiteBread extends BreadMaker{
    @override
    public void GetBread()
    {
       "白麵包"
    }
}

public interface IFactory{
    BreadMaker CreateBread();
}

public class BlackBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new BlackBread();
    }
}

public class HoneyBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new HoneyBread();
    }
}

public class WhiteBreadFactory implements IFactory
{
    @override
    public BreadMaker CreateBread()
    { 
        return new WhiteBread();
    }
}

工廠模式適用的地方:

  1. 當一個類不知道他所必須建立的物件的類是,比如要建立一個白麵包的物件,但是並不知道他的類是whitebread
  2. 當一個類希望由它的子類來指定它所建立的物件時
  3. 當類將建立物件的職責委託給多個幫助子類中的某一個,並且希望將哪一個幫助子類是代理者這一資訊區域性化的時候

相關文章