设计模式-创建型02-工厂方法

一,动机

针对前面的简单工厂,虽然能比较方便的创建对象,但是,它对拓展很不方便。假如要增加一个新的产品则必须修改工厂的方法,这不符合“开闭原则”.于是,工厂方法模式应运而生,

二,定义

工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,将产品的实例化延迟到工厂子类中。这样的话,添加一个新的产品,只需要添加一个新的工厂和一个新的产品类即可。

三,模式结构

1.Factory 抽象的父工厂

负责定义工厂的公共接口

2.ConcreteFactory 具体子工厂

负责各子产品的具体实现

3.Product 抽象产品角色

工厂所创建的所有对象的父类

4.ConcreteProduct 具体产品角色

工厂的创建目标


四,代码实例

#include <iostream>
using namespace std;


class Student
{
    public:
      virtual void Say()=0;
};
class School
{
    public:
        virtual Student* produceStudent() = 0;

};

class UnderGraduate: public Student
{
    public:
        void Say()
        {
            cout<<"我是本科生......很高兴得到聘用"<<endl ;
        }
};

class PostGraduate: public Student
{
    public:
        void Say()
        {
            cout<<"我是研究生......初次见面,多多关照"<<endl ;
        }
};

class UnderGraduateSchool : public School
{
    UnderGraduate* produceStudent()
    {
        cout<<"这里是本科生学校"<<endl;
        return new UnderGraduate();
    }
};

class PostGraduateSchool : public School
{
    PostGraduate* produceStudent()
    {
        cout<<"这里是研究生学校"<<endl;
        return new PostGraduate();
    }
};

int main()
{
    School* sch = new PostGraduateSchool(); //假如是java的话,可以使用反射机制,就更加方便拓展了。
    Student* st=sch->produceStudent();
    st->Say();
    return 0;
}

代码运行结果

这里是研究生学校
我是研究生......初次见面,多多关照

如果要拓展一个博士生产品的话,只需要增加一个博士工厂,继承学校工厂,和一个博士生类即可。不必要修改之前的代码。这就是对修改关闭,对拓展开放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值