zoukankan      html  css  js  c++  java
  • 设计模式5-工厂方法模式

    一、我的描述

    首先这个模式还是工厂的一种,什么是工厂呢?从简单工厂模式来说,其实就是将产生的类的方法抽象出来,使我们代码的耦合性更好,这样说来,我们的工厂方法模式呢,也应该是能够生产对象。我们看工厂方法的定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。最不爱看的就是这种定义,看完不知道什么意思。我这里试着说说,我对工厂方法的理解:首先为什么会出现工厂方法模式,是因为简单工厂方法,违背了软件设计的对修改关闭,对扩展开放的原则。为了满足这种需求,那么就对就产生工厂进行扩展,让工厂也就扩展开放,就出现了这种简单工厂方法。

    二、UML图

    三、我的代码

    #include<iostream>
    using namespace std;
    class Operator {
    public:
        virtual int GetResult() { return 0; }
        virtual void SetNum1(int n1) { num1 = n1; }
        virtual void SetNum2(int n2) { num2 = n2; }
        virtual int GetNum1() { return num1; }
        virtual int GetNum2() { return num2; }
    private:
        int num1;
        int num2;
    };
    
    class Add : public Operator {
    public:
        virtual int GetResult() {
            return GetNum1() + GetNum2();
        }
    };
    
    class FactoryMethod {
    public:
        virtual Operator *GetOper() { return NULL; }
    };
    
    class AddFactory : public FactoryMethod {
    public:
        virtual Operator *GetOper() {
            return new Add();
        }
    };
    
    int main()
    {
        FactoryMethod *p_fm = new AddFactory();
        Operator *p_oper = p_fm->GetOper();
        p_oper->SetNum1(100);
        p_oper->SetNum2(200);
        cout << p_oper->GetResult() << endl;
    }
  • 相关阅读:
    HDU 5875 Function 2016 ACM/ICPC Asia Regional Dalian Online
    LCA-tarjan understand 2
    LCA-tarjan understand
    MST-prim ElogV
    MST-kruskal ElogE+V
    transformjs 污染了 DOM?是你不了解它的强大
    检查浏览器支持Webp
    canvas实现平铺水印
    2016年总结--成长
    微信小程序体验(1):携程酒店机票火车票
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4031324.html
Copyright © 2011-2022 走看看