设计模式——工厂方法(Factory Method)

Factory Method,Abstract Factory,Prototype,Builder属于对象创建模式。

motivation:在创建对象时,创建对象的具体类型经常变化;定义一个用于创建对象的接口,让子类来决定实例化哪个类,使得实例化延迟(目的是解耦,手段是虚函数)。

key interface or class:

        1. product的基类接口;

        2. factory的基类接口。

feature: product和factory的基类接口,facotry具体类返回new的具体product。

structure:

template codes:

//重构前
//在MainForm函数中常见出需要的splitter
class MainForm{
public:
    void button_1(){
    
    TxtSplitter* splitter = new TxtSplitter(); //此处存在紧耦合,且不支持未来变化
    splitter->split();
    }
}

//引入接口
class MainForm{
public:
    void button_1(){

    ISplitter* splitter = new TxtSplitter(); //此处存在紧耦合,但是支持未来变化
    splitter->split();
    }
}
//ISplitter接口
class ISplitter{
public:
    virtual split()=0;
    virtual ~ISplitter(){}
}
//实现具体的各种Splitter的类
class TxtSplitter: public ISplitter{
public:
    virtual split(){
    //TxtSplitter的split方法
    }

};

//引入工厂模式后
class MainForm{
SplitterFactory* factory;
public:
    void button_1(){
    //解耦和,MainForm不知道具体的factory类;只需要调用者在使用时指定;
    ISplitter* splitter = factory->createSplitter(); 
    splitter->split();
    }
}
//工厂基类
class SplitterFactory{
public:
    virtual ISplitter* createFactory()=0;
    virtual ~createFactory(){}
}
//具体的工厂类
class TxtSplitterFactory{
public:
    virtual ISplitter* TxtSplitterFactory(){
        return new TxtSplitter();
    }
}


summary:

1. factory method用于隔离类型的使用者和具体类型之间的耦合关系(具体类型经常变化时,紧耦合会使软件十分脆弱);

2.factory method将对象的创建延迟到了子类;

3.factory method解决单个对象的需求变化,缺点是需要的参数必须相同;

2.内存管理时,对象可以在factory中提供release的函数,也可以在使用后delete。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值