设计模式笔记(2)

工厂方法模式

简单工厂类

简单工厂模式属于创建型模式,又称静态工厂方法(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. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候