通过单一职责模式学习外观模式设计和代理模式设计
单一职责模式的核心思想:
一个类,最好只做一件事,只有一个引起它变化的原因
与其相关的设计模式包括外观模式设计和代理模式设计
外观模式:
外观模式(Facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
在大话设计模式里通过引用股卖买进卖出的原理举了一个例子
股民炒股代码
//股票1 class Stock1 { //卖股票 public void Sell() { Console.WriteLine("股票1卖出"); } public void Buy() { Console.WriteLine("股票1买入"); } } //股票2 class Stock2 { 与股票1类似 } //国债 class NationalDebt1 { 与股票1类似 } //房地产 class Realty1 { 与股票1类似 }
//基金类,它需要了解所有的股票或其他投资方式的方法或属性,进行组合,以备外界调用 class Fund { Stock1 gu1; Stock2 gu2; NationalDebt1 nd1; Realty1 rt1; public Fund() { gu1 = new Stock1(); gu2 = new Stock2(); nd1 = new NationalDebt1(); rt1 = new Realty1(); } public void BuyFund() { gu1.Buy(); gu2.Buy(); nd1.Buy(); rt1.Buy(); } public void SellFund() { gu1.Sell(); gu2.Sell(); nd1.Sell(); rt1.Sell(); } }
//客户端代码 static void Main(string[] args) { Fund jijin = new Fund(); //基金购买 jijin.BuyFund(); //基金卖出 jijin.SellFund(); Console.ReadLine(); }
一般而言,外观模式使用于以下场合:(粘贴)
第一:为一个复杂的子系统提供一个简单的接口。子系统往往因为不断的演化而变的越来越复杂,使用外观模式可以保持外部系统对子系统调用的简洁性,而那些需要细节调用的用户却可以越过外观模式直接对子系统进行调用。
第二:引进外观模式可以将一个子系统和使用它的客户端以及其它的子系统分离开来,这就提高了子系统的独立性和可移植性。
第三:在构建一个层次化结构的时候,可以使用外观模式定义每一个层次对外交互的接口。此时,层与层之间只需要通过外观进行通信,从而简化层与层之间的依赖关系。
外观模式是一种得到广泛应用的模式,例如我们熟知的MVC模式就采用了外观模式。在MVC,在MVC架构模式中,每一层并不需要知道其它层次的细节,只是通过层与层之间的接口调用即可。这大大的方便了开发。
二、代理模式
实现方式主要是定义一个接口,代理类和normal类实现相依的方法,可以在代理类里进行一些判断客户端调用代理类,对于一些功能复杂的可以抽离出一个代理类。