设计模式笔记(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
- 当一个类希望由它的子类来指定它所创建的对象时
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候