c++ 设计模式之简化理解

工厂模式:

工厂基类下的子类对应分别返回对象类的子工厂,调用者内有一个工厂基类指针,

例:A类中有一个工厂基类指针 BaseFoctorio * foctorio;

这个指针指向一个工厂子类的创建函数,得到一个工厂子类创建的对象,


//抽象文件对象
class FileObject{
public:
     FileObject(){};
     virtual ~FileObject(){};
     virtual void operatorA ()=0;

};

//实体文件对象
class BinaryObject: public FileObject{

public:

    BinaryObject(){};
    virtual ~BinaryObject(){};
    virtual void operatorA (){
        cout << "Created BinaryObject ..." <<endl;
    }

};

//抽象工厂
class ObjectFactory{
public:
    ObjectFactory(){};
    virtual ~ObjectFactory(){};
    virtual FileObject * CreatFileObject()=0;
    
};

//实体对象对应工厂
class BinaryFactory : public ObjectFactory{
public:
    BinaryFactory(){};
    virtual ~BinaryFactory(){};
    virtual FileObject * CreatFileObject(){return new BinaryObject;}
};


class LibraryA{
public:
    LibraryA(){factory = NULL;};
    LibraryA(ObjectFactory* param_factory){this->factory = param_factory;    };
    virtual ~LibraryA(){ delete factory;};

public:
    ObjectFactory * factory;

public:
    virtual void operatorB (){
        FileObject *ptrf = factory->CreatFileObject();
        ptrf->operatorA();
        ptrf = NULL;
    }

};


void Test2()
{

    BinaryFactory* factory = new BinaryFactory ;

/*        这一部分是稳定的结构        */
    LibraryA *lb = new LibraryA(factory);
    lb->operatorB();
    delete lb;
/*                                */

    delete factory;
}

模板模式:

就是一个类中分别有1-5个步骤,基中,1-2-3-4-5为函数,再另加一个run函数,这个run函数按顺序调用1-2-3-4-5函数,完成整个功能循环,但其中的3或4函数的参数可以是外部的参数,判断真假值以选择执行分支,以让run函数运行时达到自身的稳定。

策略模式:

一般做分别计算功能。比如一个A类中实现不同的计算,某变量的值调用一个Strategy策略类成员变量指针的成员函数,Strategy策略类的子类都继承一个成员函数,其函数有一个参数,这个参数是A类(Context* context) 传递进去的,以分别实现不同的计算功能。利用Strategy类的虚函数表来实现调用不同Strategy策略类的子类,以实现低耦合。都是利用了虚函数表的特性来实现的。

A类中的变量Value= new Strategy策略类子类->成员函数(Context* context) ;

观察者模式:

一般做订阅通知类型的功能。比如一个A类中的功能实现中有一个工作进度派发给其它类,其实现原理是这个A类要附带一个观察者Observer类的列表,列表具有添加和移除功能。观察者Observer类的子类都继承一个成员函数,其函数有一个参数,这个参数就是传递的工作进度值,以分别通知实现不同的观察者功能。

桥模式:

一般作扩展功能用。比如一个形状类A下有三角形,矩形,圆形子类,在形态类A下增加一个颜色成员类B,颜色成员类B下再继承红色、蓝色、黄色等子类,进行运行时装配,

Shape* sh = new Rectangle(new BullColor);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值