美文网首页
设计模式学习笔记01-工厂方法模式和抽象工厂模式

设计模式学习笔记01-工厂方法模式和抽象工厂模式

作者: 百恼神烦 | 来源:发表于2018-06-14 00:29 被阅读0次

本文主要是看了《设计模式》做的笔记和思考,在此分享仅代表个人观点,如有不对的地方欢迎批评和指正。

工厂方法模式

当有多个相似且可在逻辑上归类的对象时,可以使用工厂方法模式进行创建,有两种使用套路。

套路1:

向工厂方法传入标识符,使其参数化,譬如下面这段代码:

Ball produce(String flag){
    switch(flag){
        case "篮球": return new Basketball();break;
        case "足球": return new Football();break;
    }
}

这种使用方法简单易懂,但如果要产生新的Ball子类,需要改写这个switch语句。

套路2:

继承有工厂方法的类,并重写它,例如:

Factory{
    Ball produce(){};
}

BasketballFactory extends Factory{
    Ball produce(){
        return new Basketball();
    }
}

Ball basketBall = (new BasketballFactory()).produce;

这个理解起来存在困难,而且已经跟抽象工厂很像了,好处是扩展时不会修改原来的类。根据《设计模式》上的例子,我推测,这样使用工厂方法模式是主要维持一对一的关系,即通常一个工厂对应一个产品。

抽象工厂模式

为了方便创建多个有共同点的对象而有了工厂方法,而为了创建多个有共同点的工厂则有了抽象工厂,这是我仔细对比了书中两者的UML类图的感想。抽象工厂倾向于帮助确定一个系列的对象的创建过程,例子如下:

abstract SchoolFactory{
    Student getStudent();
    Teacher getTeacher();
}

PrimarySchoolFactory extends SchoolFactory{
    Student getStudent(){
        return new PrimaryStudent();
    }
    Teacher getTeacher(){
        return new PrimaryTeacher();
    }
}


goToSchool(SchoolFactory factory){
    Student s = factory.getStudent();
    Teacher t = factory.getTeacher();
}

goToSchool(new PrimarySchoolFactory);

总结

抽象工厂模式是工厂方法模式的进一步抽象,现实使用中其实分不清楚也不影响使用,真要弄个明白,可以看工厂调用情况,如果调用的时候是以AbstractFactory作为基本对象,那么就是抽象工厂,否则是工厂方法。

另外,抽象工厂在创建产品时,“最通常的一个办法是为每一个产品定义一个工厂方法。一个具体的工厂将为每个产品重定义该工厂方法以指定产品”。

因此我也可以更加确定我一开始的思路:“工厂方法”类似于描述技师与其商品之间的关系;而“抽象工厂”是描述一家公司中有哪些技师岗位,至于技师到底生产了什么,要进一步实例化才行。

谢谢各位观看。

相关文章

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 设计模式-抽象工厂模式

    前面我们学习了了简单工厂模式和工厂方法模式,今天我们来学习设计模式中最后的一种工厂模式——抽象工厂模式(Abstr...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 设计模式之——工厂模式

    前言:本文仅作为第一次学习设计模式的参考和笔记。初探工厂模式&抽象工厂模式: 工厂模式:Factory Patte...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • C++ 常见设计模式

    C++ 常见设计模式包括: 工厂模式 简单工厂模式定义工厂创建类,抽象产品,派生产品类 工厂方法模式 抽象工厂模式...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 23种设计模式

    完整的学习了设计模式,并且都做了笔记。以下来一个汇总 1、单例模式2、工厂方法模式、抽象工厂模式3、模板方法模式4...

网友评论

      本文标题:设计模式学习笔记01-工厂方法模式和抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/oafeeftx.html