随笔-91  评论-137  文章-0  trackbacks-0

外观模式

前序

这回小菜同学和大鸟讨论起了关于股票的事情,小菜提到最近股市很火,不过他的同事一直在亏钱。而大鸟说道:“如果你的同事花钱去投资基金,则不会亏的这么厉害。基金将所有投资者的钱全部集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域。”

而个人进行投资股票,对股票的联系太多,反而不利于操作,这在软件中就称为耦合性过高。而有了基金之后,众多的用户只和基金打交道,关心基金的上涨和下跌就可以了,应此消除了过高的耦合性。

于是大鸟便让小菜将股民炒股票的代码写出来看看。

股民炒股票代码

#include <stdio.h>

 

// 股票1

class Stock1

{

public:

       void Sell() // 卖股票

       {

              printf("股票1卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票1买入\n");

       }

};

 

// 股票2

class Stock2

{

public:

       void Sell() // 卖股票

       {

              printf("股票2卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票2买入\n");

       }

};

 

// 股票3

class Stock3

{

public:

       void Sell() // 卖股票

       {

              printf("股票3卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票3买入\n");

       }

};

 

// 国债1

class NationalDebt1

{

public:

       void Sell() // 卖国债

       {

              printf("国债卖出\n");

       }

      

       void Buy() // 买国债

       {

              printf("国债买入\n");

       }

};

 

// 房地产1

class Realty1

{

public:

       void Sell() // 卖房地产

       {

              printf("房地产卖出\n");

       }

      

       void Buy() // 买房地产

       {

              printf("房地产买入\n");

       }

};

 

int main()

{

       Stock1* gu1 = new Stock1();

       Stock2* gu2 = new Stock2();

       Stock3* gu3 = new Stock3();

       NationalDebt1* nd1 = new NationalDebt1();

       Realty1* rt1 = new Realty1();

      

       gu1->Buy();

       gu2->Buy();

       gu3->Buy();

       nd1->Buy();

       rt1->Buy();

      

       gu1->Sell();

       gu2->Sell();

       gu3->Sell();

       nd1->Sell();

       rt1->Sell();

      

       delete gu1;

       delete gu2;

       delete gu3;

       delete nd1;

       delete rt1;

       return 0;

}

大鸟看后答到:“很好,如果我们现在增加基金类,将如何做?”

外观模式

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

实现方式(UML类图)


实现代码

#include <stdio.h>

 

// 股票1

class Stock1

{

public:

       void Sell() // 卖股票

       {

              printf("股票1卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票1买入\n");

       }

};

 

// 股票2

class Stock2

{

public:

       void Sell() // 卖股票

       {

              printf("股票2卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票2买入\n");

       }

};

 

// 股票3

class Stock3

{

public:

       void Sell() // 卖股票

       {

              printf("股票3卖出\n");

       }

      

       void Buy() // 买股票

       {

              printf("股票3买入\n");

       }

};

 

// 国债1

class NationalDebt1

{

public:

       void Sell() // 卖国债

       {

              printf("国债卖出\n");

       }

      

       void Buy() // 买国债

       {

              printf("国债买入\n");

       }

};

 

// 房地产1

class Realty1

{

public:

       void Sell() // 卖房地产

       {

              printf("房地产卖出\n");

       }

      

       void Buy() // 买房地产

       {

              printf("房地产买入\n");

       }

};

 

// 基金

class Fund

{

public:

       Fund() : gu1(new Stock1()),gu2(new Stock2()),gu3(new Stock3()),nd1(new NationalDebt1()),rt1(new Realty1()){}

      

       void BuyFund()

       {

              gu1->Buy();

              gu2->Buy();

              gu3->Buy();

              nd1->Buy();

              rt1->Buy();

       }

      

       void SellFund()

       {

              gu1->Sell();

              gu2->Sell();

              gu3->Sell();

              nd1->Sell();

              rt1->Sell();

       }

protected:

       Stock1* gu1;

       Stock2* gu2;

       Stock3* gu3;

       NationalDebt1* nd1;

       Realty1* rt1;

};

 

int main()

{

       Fund jijin;

       jijin.BuyFund(); // 购买基金

       jijin.SellFund(); // 赎回基金

       return 0;

}

运行结果


所有文件打包下载

posted on 2011-05-26 17:12 lwch 阅读(1612) 评论(2)  编辑 收藏 引用 所属分类: 设计模式

评论:
# re: 外观模式[未登录] 2011-05-27 01:06 | nscboy
明明一个类创建多个对象就能解决的问题,为什么要创建多个类来实现.你到底是如何理解类和对象的关系的.  回复  更多评论
  
# re: 外观模式 2011-05-27 07:58 | lwch
@nscboy
设计模式就是这么定义的..  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理