设计模式笔记(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. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,003评论 1 15
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,964评论 3 14
  • 参考资料:菜鸟教程之设计模式 设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验...
    Steven1997阅读 1,215评论 1 12
  • 我改变了生命的色彩,将枫叶般的火红在心中点燃。 记忆里的色彩是一大片一大片的白色,医院里的纯净白色,令人绝望的白色...
    今欲阅读 364评论 0 0
  • 野葱阅读 85评论 0 0