首页 > 程序开发 > 移动开发 > 其他 >

设计模式学习(十一)————外观模式

2016-09-19

外观模式:为子系统中的一组接口提供一个一致的界面,次模式定义了一个高层接口,这个接口使得这一子系统更加容易使用! 其完美的体现了依赖倒转原则和迪米特法则的思想! 比如说举一个买卖股票的例子。 d

外观模式:为子系统中的一组接口提供一个一致的界面,次模式定义了一个高层接口,这个接口使得这一子系统更加容易使用!

其完美的体现了依赖倒转原则和迪米特法则的思想!

比如说举一个买卖股票的例子。

#define use_sharedPtr

#ifndef FUND
#define FUND
#include 
#include 

class Stock1
{
public:
    void buy(){qDebug()<<"买入股票1";}
    void sell(){qDebug()<<"卖出股票1";}
};
class Stock2
{
public:
    void buy(){qDebug()<<"买入股票2";}
    void sell(){qDebug()<<"卖出股票2";}
};
class Stock3
{
public:
    void buy(){qDebug()<<"买入股票3";}
    void sell(){qDebug()<<"卖出股票3";}
};
//一般需要自己写析构函数的类,都需要实现复制构造函数和赋值运算符重载,以便能够完成深拷贝
class Fund
{
public:
    Fund()
    {
#ifdef use_sharedPtr
        _stock1 = QSharedPointer(new Stock1());
        _stock2 = QSharedPointer(new Stock2());
        _stock3 = QSharedPointer(new Stock3());
#else
        _stock1 = new Stock1();
        _stock2 = new Stock2();
        _stock3 = new Stock3();
#endif
    }
#ifndef use_sharedPtr
    Fund(const Fund & f)   //一般类里面有指针,且析构函数销毁了,则需要完成复制构造函数来深拷贝!!
    {
        _stock1 = new Stock1(*f._stock1);
        _stock2 = new Stock2(*f._stock2);
        _stock3 = new Stock3(*f._stock3);
    }
    Fund& operator=(const Fund& a)
    {
        if(this == &a)    //判断相等的情况!!
            return *this;
        if(_stock1 != NULL)
            delete _stock1;
        if(_stock2 != NULL)
            delete _stock2;
        if(_stock3 != NULL)
            delete _stock3;
        _stock1 = new Stock1(*a._stock1);
        _stock2 = new Stock2(*a._stock2);
        _stock3 = new Stock3(*a._stock3);
        return *this;
    }
    ~Fund()
    {
        delete _stock1;
        _stock1 = NULL;
        delete _stock2;
        _stock2 = NULL;
        delete _stock3;
        _stock3 = NULL;
    }
#endif
    void buy()
    {
        _stock1->buy();
        _stock2->buy();
        _stock3->buy();
    }
    void sell()
    {
        _stock1->sell();
        _stock2->sell();
        _stock3->sell();
    }
private:
#ifdef use_sharedPtr
    QSharedPointer _stock1;
    QSharedPointer _stock2;
    QSharedPointer _stock3;
#else
    Stock1 * _stock1;
    Stock2 * _stock2;
    Stock3 * _stock3;
#endif
};

#endif // FUND

#include "fund.h"

int main(int argc, char *argv[])
{
    Fund *fd = new Fund();
    Fund cd = *fd;   //调用复制构造函数
//    Fund cd;
//    cd = *fd;
    delete fd;
    fd=NULL;
    cd.buy();
    cd.sell();
    return 0;
}

这里买卖股票的行为可以使用一个公共的类来管理所有的股票,这样就可以将买卖股票提供一个简单的接口,降低了耦合度,又化简了操作,真是一举两得啊!

最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/buyFund_facade_patterns_12

相关文章
最新文章
热点推荐