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

来源:互联网 发布:linux vim环境配置 编辑:程序博客网 时间:2024/05/16 16:58

       与抽象工厂的区别:抽象工厂的抽象类组合的是创建一个系列对象的接口。而工厂方法只有一个接口,各个具体类实现该接口的方式不一样。

1. 意图

       定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

2. 结构与参与者


3.效果

       1)为子类提供挂钩(hook)

还没有搞懂

       2)连接平行的类层次

4.实现

       1)主要有两种不同的情况

              1.Creator是一个抽象类并且不提供它所声明的工厂方法的实现。

              2.Creator是一个具体的类而且为工厂方法提供一个缺省的实现。

       2)参数化工厂方法

              就是将简单工厂的switch语句从客户端移入Creator类中,起到了封装的作用。

5.代码示例

#include <string>#include <iostream>using namespace std;//实例基类,相当于Product(为了方便,没用抽象)class LeiFeng{public:virtual void Sweep(){cout<<"雷锋扫地"<<endl;}};//学雷锋的大学生,相当于ConcreteProductclass Student: public LeiFeng{public:virtual void Sweep(){cout<<"大学生扫地"<<endl;}};//学雷锋的志愿者,相当于ConcreteProductclass Volenter: public LeiFeng{public :virtual void Sweep(){cout<<"志愿者扫地"<<endl;}};//工场基类Creatorclass LeiFengFactory{public:virtual LeiFeng* CreateLeiFeng(){return new LeiFeng();}};//工场具体类class StudentFactory : public LeiFengFactory{public :virtual LeiFeng* CreateLeiFeng(){return new Student();}};class VolenterFactory : public LeiFengFactory{public:virtual LeiFeng* CreateLeiFeng(){return new Volenter();}};//客户端int main(){LeiFengFactory *sf=new LeiFengFactory();LeiFeng *s=sf->CreateLeiFeng();s->Sweep();StudentFactory *stf=new StudentFactory();LeiFeng *st=stf->CreateLeiFeng();st->Sweep();return 0;}



原创粉丝点击