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

2019-06-18  本文已影响0人  ssochi

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);
    }
}

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

例子

优点

缺点

上一篇下一篇

猜你喜欢

热点阅读