大话设计模式-Study-Tips-第五章-工厂方法模式

来源:互联网 发布:十三陵灵异事件知乎 编辑:程序博客网 时间:2024/04/19 09:12

一、UML图


二、包含的角色

Product类,定义工厂方法创建对象的接口

ConreteProduct类,具体产品类,实现Product接口

Creator类,工厂方法类基类,声明了工厂方法,该方法返回一个Product类。

ConcreteCreator类,重写工厂方法,返回ConcreteProduct实例。

三、特点

定义:工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

1.与简单工厂相比,制造产品的工厂类不只有一个,而是每种具体产品都对应一个生产它的具体工厂类,这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体铲平类都继承自这个抽象产品类。

2.当需要增加一种产品的时候,需要做的是:增加一种继承自抽象产品的具体产品类,增加一个集成自抽象工厂的具体工厂类,改客户端,而不需要像简单工厂模式中那样更改工厂内的switch。

四、代码实现

c#版

这里只实现工厂类

Creator类

public abstract class Creator {    public abstract Product FactoryMethod();}

ConcreteCreator类

public class ConcreteCreator : Creator{    public override Product FactoryMethod()    {        return new ConcreteProduct();    }}
调用方式:可改变下面creator 来new不同的具体产品
            Creator creater = new ConcreteCreator();            Product product = creater.FactoryMethod();

c++版本

creator.h

#include "Product.h"class Creator {public:virtual Product* FactoryMethod();};
creator.cpp

#include "Creator.h"Product* Creator::FactoryMethod() {return new Product();}

ConcreteCreator.h

#include "Creator.h"#include "ConcreteProduct.h"class ConcreteCreator : public Creator {public:Product* FactoryMethod();};
ConcreteProduct.cpp

#include "ConcreteCreator.h"Product* ConcreteCreator::FactoryMethod() {return new ConcreteProduct();}

调用方式:

Creator* creater = new ConcreteCreator();Product* product = creater->FactoryMethod();








原创粉丝点击