您的位置:首页 > 其它

读《大话设计模式》---工厂方法模式(factory method)

2008-11-08 23:37 357 查看
工厂方法模式(factory method) :

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到他的子类。

简单工厂模式和工厂方法模式的区别:

1.简单工厂模式

简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

2.工厂方法模式

工厂方法模式实现时,客户需要决定实例化哪一个工厂来决定产品类,判断选择的问题还是存在的,也就是说:工厂方法把简单工厂的内部逻辑判断移到了客户端代码来实现。你想要加功能,本来是修改工厂类的,而现在是修改客户端。



工厂方法模式的一般形式:


//定义工厂方法所创建的对象的接口

class Product

{

public:

void performance();

};

//具体的产品,实现Product接口

class ConcreteProduct : public Product

{

public:

}

//声明工厂方法,该方法返回一个Product类型的对象

class Creator

{

public:

virtural Product * Create() = 0;

}

//重定义工厂方法以返回一个ConcreteProduct实例

class ConcreteCreator : public Creator

{

public:

Product * Create()

{

return new ConcreteProduct();

}

}

一个具体的工厂方法模式的实例:


#include <iostream>

using namespace std;

//志愿者

class volunteer

{

public:

void regular()

{

cout << "维持秩序" << endl;

}

void guid()

{

cout << "向导" << endl;

}

void help()

{

cout << "助人为乐" << endl;

}

};

//大学生志愿者

class undergraduate : public volunteer

{

};

//社会志愿者

class society : public volunteer

{

};

//抽象工厂(用来生产志愿者,虽然听起来很别扭,呵呵)

class factory

{

public:

virtual volunteer * CreateVolunteer() = 0;

};

//具体工厂(用来生产大学生志愿者)

class undergraduatefactory : public factory

{

public:

volunteer * CreateVolunteer()

{

cout << "创建大学生志愿者:" << endl;

return new undergraduate();

}

};

//具体工厂(用来生产社会志愿者)

class societyfactory : public factory

{

public:

volunteer * CreateVolunteer()

{

cout << "创建社会志愿者:" << endl;

return new society();

}

};

int main()

{

factory * _afactory = new undergraduatefactory();

volunteer * _avolunteer = _afactory->CreateVolunteer();

_avolunteer->guid();

factory * _bfactory = new societyfactory();

volunteer * _bvolunteer = _bfactory->CreateVolunteer();

_bvolunteer->regular();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: