zoukankan      html  css  js  c++  java
  • [创建型] 抽象工厂模式

    前面讲到工厂方法模式,其实工厂方法模式是抽象工厂模式的特例。工厂方法模式中每个工厂只生产一种产品,而在抽象工厂模式中每个工厂可以生产多种具体产品。

    适用性:(适用性论述是复制过来的,本人不理解!初学)
    一个系统要独立于它的产品的创建、组合和表示时。
    一个系统要由多个产品系列中的一个来配置时。
    当你要强调一系列相关的产品对象的设计以便进行联合使用时。
    当你提供一个产品类库,而只想显示它们的接口而不是实现时。

    已电视机实例,附上代码:

    #include <iostream>
    using namespace std;
    // 抽象工厂模式
    /*

    *
    */
    class TV // 电视机抽象类
    {
    public:
    TV() {}
    virtual ~TV() {}
    virtual void play() = 0;
    };

    class HaierTV : public TV //海尔电视机类
    {
    public:
    HaierTV() {}
    virtual~HaierTV() {}
    virtual void play()
    {
    cout << "海尔电视机播放中..." << endl;
    }
    };

    class TCLTV : public TV //TCL电视机类
    {
    public:
    TCLTV() {}
    virtual ~TCLTV() {}
    virtual void play()
    {
    cout << "TCL电视机播放中..." << endl;
    }
    };

    class AirConditioner // 空调抽象类
    {
    public:
    AirConditioner() {}
    virtual ~AirConditioner() {}
    virtual void changeTemperature() = 0;
    };

    class HaierConditioner : public AirConditioner // 海尔空调类
    {
    public:
    HaierConditioner() {}
    virtual ~HaierConditioner() {}
    virtual void changeTemperature()
    {
    cout << "海尔空调温度改变中..." << endl;
    }
    };

    class TCLConditioner : public AirConditioner // TCL空调类
    {
    public:
    TCLConditioner() {}
    virtual ~TCLConditioner() {}
    virtual void changeTemperature()
    {
    cout << "TCL空调温度改变中..." << endl;
    }
    };

    class AbstructFactory // 抽象工厂类
    {
    public:
    AbstructFactory() {}
    virtual ~AbstructFactory() {}
    virtual TV * ProduceTV() = 0;
    virtual AirConditioner * ProduceAirconditioner() = 0;
    };

    class HaierFactory : public AbstructFactory // 海尔工厂类
    {
    public:
    HaierFactory() {}
    virtual ~HaierFactory() {}
    virtual TV * ProduceTV()
    {
    return new HaierTV();
    }
    virtual AirConditioner * ProduceAirconditioner()
    {
    return new HaierConditioner();
    }
    };

    class TCLFactory : public AbstructFactory // TCL 工程类
    {
    public:
    TCLFactory() {}
    virtual ~TCLFactory() {}
    virtual TV * ProduceTV()
    {
    return new TCLTV();
    }
    virtual AirConditioner * ProduceAirconditioner()
    {
    return new TCLConditioner();
    }
    };

    void main()
    {
    AbstructFactory *af = new HaierFactory;
    TV *htv;
    htv = af->ProduceTV();
    AirConditioner *hcon;
    hcon = af->ProduceAirconditioner();
    htv->play();
    hcon->changeTemperature();
    delete htv;
    delete hcon;
    delete af;

    AbstructFactory *bf = new TCLFactory;
    TV *ttv;
    ttv = bf->ProduceTV();
    ttv->play();
    AirConditioner *tcon;
    tcon = bf->ProduceAirconditioner();
    tcon->changeTemperature();
    delete ttv;
    delete tcon;
    delete bf;
    }

    输出:

       海尔电视机播放中...

       海尔空调温度改变中...

       TCL电视机播放中...

       TCL空调温度改变中...

  • 相关阅读:
    Helpful SharePoint JavaScript functions
    JQuery操作SharePoint Web Services之查询列表数据
    强大的SPGridView
    如何在 MOSS 2007 启用 Session
    实现类似于sharepoint列表的分组统计功能
    MOSS自带SPDatePickerControl控件的使用
    Silverlight多线程技术Thread的应用
    Silverlight同步(Synchronous)调用WCF服务
    Moss2007 Customize the NewForm.aspx 自定义NewForm EditForm页面
    Multiple Attachment custom control in Sharepoint
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2403171.html
Copyright © 2011-2022 走看看