设计模式笔记(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();
}
}
工厂模式适用的地方:
- 当一个类不知道他所必须创建的对象的类是,比如要创建一个白面包的对象,但是并不知道他的类是whitebread
- 当一个类希望由它的子类来指定它所创建的对象时
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候