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

设计模式学习笔记----工厂方法

作者: ssochi | 来源:发表于2019-06-18 16:34 被阅读0次

FactoryMethod工厂方法

工厂方法指,一个业务上有实际用处的类(可能是抽象类),同时具备创建别的类的方法。可以理解为,这个类是一个工厂(若为抽象类则为抽象工厂),但它还具备实际的业务能力。使用工厂方法,一般是为了隐藏创建类和被创建类之间的引用关系,使程序看起来自然明了。

使用场景

  • 当创建类与类之间有一定的引用或依赖关系时
  • 想将创建的具体实现交给子类实现时

实现

假设我们有一个事件系统,有邮件事件,剧情事件,大世界事件,家族事件等等,当一个事件被事件管理器产生,将被抛到线程池当中,接着线程池处理这个事件,在事件结束时回调告诉事件管理器事件处理完成。

abstract class EventManager{
    Event newEvent(){
        Event e = createEvent();
        if(e != null)
            Event.setProcessor(this); 
        return e;
    }
    abstract Event createEvent();
    abstract void onEventFinish(Event e);
}

abstract class Event{
    EventManager local;
    void setProcessor(EventManager mgr){
        this.local = mgr;
    }
    
    abstract void deal();// deal with event, finally invoke #finish

    void finish(){
        processor.onEventFinish(this);
    }
}

首先,每一个事件和事件管理器是一一对应的,并且在还未编写具体的时间管理器时,我们没法编写具体的事件。我们需要使用工厂方法,定义一个生成事件的虚方法,将具体的实现交给子类。
其次,每一个事件最后需要回调事件管理器,因此,事件需要持有一个事件管理器的引用。因为我们使用了工厂方法,事件管理器的引用自然而然的就给了事件。如果我们用抽象工厂来实现这个需求会怎么样?抽象工厂同时能生产事件管理器和事件,但由于事件和事件管理器互不可见,因此需要在生产事件的方法上加上事件管理器的引用了,这一步是必须的,但也将组件间的引用关系 展示给了用户,然而这时没必要的。

例子

  • java.lang.Object#toString() (在其子类中可以覆盖该方法)
  • java.lang.Class#newInstance()

优点

  • 能隐藏创建类和被创建类之间的关系,使代码更简洁。
  • 能描述更复杂的组件关系。当组件和组件之间的关系时树甚至是网的时候,抽象工厂已经无法描述这种关系了,而工厂方法这种类似节点的方式能很好的描述各种关系。

缺点

  • 若被创建类并不需要创建类的任何信息,那任需要初始化一个创建类来创建被创建类。(这个也不能算缺点,毕竟这种情况本身就是应该避免的)

相关文章

  • java/android 设计模式学习笔记(3)---工厂方法模

    java/android 设计模式学习笔记(3)---工厂方法模式 【备注】只用于个人收藏

  • 2021-11-16 - 学习记录

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

  • 23种设计模式

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

  • Abstract Factory 抽象工厂模式

    设计原则学习笔记 设计模式学习笔记 作用 管理多个系列的产品之间的关系(非必要) 兼具工厂方法的作用 对于作用1...

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

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

  • 设计模式

    说明:以下文字来自《设计模式之禅》的笔记 1、工厂方法模式: 在工厂方法模式中,抽象产品类Product负责定义产...

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

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

  • java/android 设计模式学习笔记(4)---抽象工厂模

    java/android 设计模式学习笔记(4)---抽象工厂模式 【备注】只用于个人收藏

  • Flyweight 享元模式

    设计原则学习笔记 设计模式学习笔记 作用 提供可复用的对象。 类图 享元模式一般包含一个工厂,工厂中含有一个享元...

  • 设计模式-工厂模式

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

网友评论

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

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