1.由于众多投资者对众多股票的联系太多,反而不利于操作,这在软件中是不是就称为耦合性过高。而有了基金以后,变成众多用户只和基金打交道,关心基金的上涨和下跌就可以了,而实际上的操作却是基金经理人在与上千支股票和其他投资产品打交道。
Main函数
int _tmain(int argc, _TCHAR* argv[]) { 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(); return 0; }
类的定义:
#pragma once #include <iostream> ////////////////////////////////////////////////////////////////////////// class Stock1 { public: void Sell(void) { std::cout << "Sell Stock1..." << std::endl; }; void Buy(void) { std::cout << "Buy Stock1..." << std::endl; }; }; ////////////////////////////////////////////////////////////////////////// class Stock2 { public: void Sell(void) { std::cout << "Sell Stock2..." << std::endl; }; void Buy(void) { std::cout << "Buy Stock2..." << std::endl; }; }; ////////////////////////////////////////////////////////////////////////// class Stock3 { public: void Sell(void) { std::cout << "Sell Stock3..." << std::endl; }; void Buy(void) { std::cout << "Buy Stock3..." << std::endl; }; }; ////////////////////////////////////////////////////////////////////////// class NationalDebt1 { public: void Sell(void) { std::cout << "Sell NationalDebt1..." << std::endl; }; void Buy(void) { std::cout << "Buy NationalDebt1..." << std::endl; }; }; ////////////////////////////////////////////////////////////////////////// class Realty1 { public: void Sell(void) { std::cout << "Sell Realty1..." << std::endl; }; void Buy(void) { std::cout << "Buy Realty1..." << std::endl; }; };
2.此时用户不需要了解股票,甚至可以对股票一无所知,买了基金就回家睡觉,一段时间后再赎回就可以大把数钱。参与股票的具体买卖都由基金公司完成。客户端代码非常简洁明了。
3.外观模式(Facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Main函数:
#include "fund.h" int _tmain(int argc, _TCHAR* argv[]) { Fund* jijin = new Fund(); //基金购买 jijin->BuyFund(); //基金赎回 jijin->SellFund(); delete jijin; return 0; }
Fund.h的定义(Stock.h中的定义同上,所以在这里省略):
#include "Stock.h" class Fund { public: Fund() { m_pStock1 = new Stock1(); m_pStock2 = new Stock2(); m_pStock3 = new Stock3(); m_pNationalDebt1 = new NationalDebt1(); m_pRealty1 = new Realty1(); }; ~Fund() { delete m_pStock1; delete m_pStock2; delete m_pStock3; delete m_pNationalDebt1; delete m_pRealty1; }; void BuyFund(void) { m_pStock1->Buy(); m_pStock2->Buy(); m_pStock3->Buy(); m_pNationalDebt1->Buy(); m_pRealty1->Buy(); }; void SellFund(void) { m_pStock1->Sell(); m_pStock2->Sell(); m_pStock3->Sell(); m_pNationalDebt1->Sell(); m_pRealty1->Sell(); }; private: Stock1* m_pStock1; Stock2* m_pStock2; Stock3* m_pStock3; NationalDebt1* m_pNationalDebt1; Realty1* m_pRealty1; };
4.即使没有听说过外观模式,也完全有可能在很多时候使用它,因为它完美地体现了依赖倒转原则和迪米特法则的思想,所以是非常常用的模式之一。
5.何时使用外观模式:首先,在设计初期阶段,应该要有意识的将不同的两个层分离。,层与层之间建立外观Facade,使得耦合大大降低。增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。