《设计模式外观模式.pptx》由会员分享,可在线阅读,更多相关《设计模式外观模式.pptx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、问题问题(Problem)(Problem)第1页/共32页问题问题(Problem)(Problem)/顾客类 public class Customer private string _name;public Customer(string name)this._name=name;public string Name get return _name;第2页/共32页问题问题(Problem)(Problem)public class Bank /银行子系统 public bool HasSufficientSavings(Customer c,int amount)Console.Wr
2、iteLine(查询银行信息,客户名 +c.Name);return true;public class Credit /信用子系统 public bool HasGoodCredit(Customer c)Console.WriteLine(查询信用信息,客户名 +c.Name);return true;public class Loan /贷款子系统 public bool HasNoBadLoans(Customer c)Console.WriteLine(查询贷款信息,客户名 +c.Name);return true;第3页/共32页问题问题(Problem)(Problem)stat
3、ic void Main(string args)Bank bank=new Bank();Loan loan=new Loan();Credit credit=new Credit();int Money=12000;Customer customer=new Customer(张三);bool eligible=true;if(!bank.HasSufficientSavings(customer,Money)eligible=false;else if(!loan.HasNoBadLoans(customer)eligible=false;else if(!credit.HasGoodC
4、redit(customer)eligible=false;Console.WriteLine(客户 +customer.Name+已经被 +(eligible?通过:拒绝);Console.ReadLine();可以看到,客户程序与三个子系统都发生了耦合,这种耦合使得客户程序依赖于子系统,当子系统化时,客户程序也将面临很多变化的挑战。第4页/共32页主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4第5页/共32页外观模式外观模式(Facade)(Facade)模式动机模式名称:外观模式(Facade)将一个系统划分为若干个子系统有利于降低系统的复杂性,一个常见
5、的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统中较一般的设置提供了一个单一而简单的界面。第6页/共32页外观模式外观模式(Facade)(Facade)模式动机外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观(Facade)对象进行。就如同医院的接待员一样,外观模式的外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。第7页/共32页外观模式外观模式(Facade)(Facade)模式动机在没有外观类(Facade)之前,客户类(Client)需要和子系统类
6、(Subsystem)进行复杂的交互,系统的耦合度很大;而增加一个外观类之后,客户类只需要直接和外观类交互,子系统类之间的复杂关系由外观类来实现,从而降低了系统的耦合度。第8页/共32页外观模式外观模式(Facade)(Facade)模式定义 外观模式(Facade):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是对象的结构模式。第9页/共32页外观模式外观模式(Facade)(Facade)一个合理的设计就是为这些子系统创建一个统一的接口,这个接口将简化客户程序的判断操作
7、。引入Facade模式后的类结构图第10页/共32页外观模式外观模式(Facade)(Facade)public class Mortgage /外观类 private Bank bank=new Bank();private Loan loan=new Loan();private Credit credit=new Credit();public bool IsEligible(Customer cust,int amount)Console.WriteLine(0 申请 1:C 贷款,cust.Name,amount);bool eligible=true;if(!bank.HasSuf
8、ficientSavings(cust,amount)eligible=false;else if(!loan.HasNoBadLoans(cust)eligible=false;else if(!credit.HasGoodCredit(cust)eligible=false;return eligible;第11页/共32页外观模式外观模式(Facade)(Facade)static void Main(string args)Mortgage mortgage=new Mortgage();/外观 Customer customer=new Customer(张三);bool eliga
9、ble=mortgage.IsEligible(customer,125000);Console.WriteLine(客户 +customer.Name+已经被+(eligable?通过:拒绝);Console.ReadLine();引入Faade模式后,客户程序只与Mortgage发生依赖,也就是Mortgage屏蔽了子系统之间的复杂的操作,达到了解耦内部子系统与客户程序之间的依赖。第12页/共32页外观模式外观模式(Facade)(Facade)static void Main(string args)Bank bank=new Bank();Loan loan=new Loan();Cr
10、edit credit=new Credit();int Money=12000;Customer customer=new Customer(张三);bool eligible=true;if(!bank.HasSufficientSavings(customer,Money)eligible=false;else if(!loan.HasNoBadLoans(customer)eligible=false;else if(!credit.HasGoodCredit(customer)eligible=false;Console.WriteLine(客户 +customer.Name+已经被
11、 +(eligible?通过:拒绝);Console.ReadLine();第13页/共32页外观模式外观模式(Facade)(Facade)模式结构 第14页/共32页外观模式外观模式(Facade)(Facade)参与者 Facade:外观角色 SubSystem:子系统角色第15页/共32页外观模式外观模式(Facade)(Facade)保安系统例子一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。第16页/共32页外观模式外观模式(Facade)(Facade)保安系统例子第17页/共32页外观模式外观模式(Facade)(
12、Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassCamerapublicvoidTurnOn()Console.WriteLine(Turningonthecamera.);publicvoidTurnOff()Console.WriteLine(Turningoffthecamera.);publicvoidRotate(intdegrees)Console.WriteLine(Rotatingthecameraby0degrees.,degrees);第18页/共3
13、2页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassLightpublicvoidTurnOff()Console.WriteLine(Turningonthelight.);publicvoidTurnOn()Console.WriteLine(Turningoffthelight.);publicvoidChangeBulb()Console.WriteLine(changingthelight-bulb.);第19页/共32页外观
14、模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassSensorpublicvoidActivate()Console.WriteLine(Activatingthesensor.);publicvoidDeactivate()Console.WriteLine(Deactivatingthesensor.);publicvoidTrigger()Console.WriteLine(Thesensorhastriggered.);第20页/共3
15、2页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassAlarmpublicvoidActivate()Console.WriteLine(Activatingthealarm.);publicvoidDeactivate()Console.WriteLine(Deactivatingthealarm.);publicvoidRing()Console.WriteLine(Ringingthealarm.);publicvoidStopR
16、ing()Console.WriteLine(Stopthealarm.);第21页/共32页外观模式外观模式(Facade)(Facade)保安系统例子publicstaticvoidMain(stringargs)privatestaticCameracamera1,camera2;privatestaticLightlight1,light2,light3;privatestaticSensorsensor;privatestaticAlarmalarm;camera1=newCamera();camera2=newCamera();light1=newLight();light2=ne
17、wLight();light3=newLight();sensor=newSensor();alarm=newAlarm();camera1.TurnOn();camera2.TurnOn();light1.TurnOn();light2.TurnOn();light3.TurnOn();sensor.Activate();alarm.Activate();第22页/共32页外观模式外观模式(Facade)(Facade)外观模式一个合情合理的改进方法就是准备一个系统的控制台,作为保安系统的用户界面。第23页/共32页外观模式外观模式(Facade)(Facade)外观模式第24页/共32页外
18、观模式外观模式(Facade)(Facade)外观模式publicclassSecurityFacadeprivatestaticCameracamera1,camera2;privatestaticLightlight1,light2,light3;privatestaticSensorsensor;privatestaticAlarmalarm;staticSecurityFacade()camera1=newCamera();camera2=newCamera();light1=newLight();light2=newLight();light3=newLight();sensor=n
19、ewSensor();alarm=newAlarm();publicvoidActivate()camera1.TurnOn();camera2.TurnOn();light1.TurnOn();light2.TurnOn();light3.TurnOn();sensor.Activate();alarm.Activate();publicvoidDeactivate()camera1.TurnOff();camera2.TurnOff();light1.TurnOff();light2.TurnOff();light3.TurnOff();sensor.Deactivate();alarm.
20、Deactivate();第25页/共32页外观模式外观模式(Facade)(Facade)外观模式publicstaticvoidMain(stringargs)privatestaticSecurityFacadesecurity;security=newSecurityFacade();security.Activate();Console.WriteLine(n-n);security.Deactivate();第26页/共32页外观模式外观模式(Facade)(Facade)外观模式的优缺点如下外观模式的优点主要有以下几点:它对客户屏蔽子系统组件,减少了客户处理的对象数目使得子系统使
21、用起来更加容易。它实现了子系统与客户之间的松耦合关系。这使得子系统的组件变化不会影响到它的客户。提高了安全性,通过外观模式,屏蔽子系统业务逻辑。第27页/共32页外观模式外观模式(Facade)(Facade)外观模式的优缺点如下它简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其它的子系统。它并不限制复杂应用使用子系统类。外观模式并不增加任何功能性模式,它仅仅是一些简单化接口。第28页/共32页外观模式外观模式(Facade)(Facade)模式使用在以下情况可以使用外观模式:当要为一个复杂子系统提供一个简单接口时。这个接口对大多数用户来说已经足够好;那些需要更多可定制性的用户可以越过Facade层。子系统相对独立外界只需黑箱操作即可。例如利息计算。预防操作人员带来的风险扩散。第29页/共32页外观模式外观模式(Facade)(Facade)模式应用子系统可以有多个外观。外观不参与子系统的业务逻辑。第30页/共32页第31页/共32页LOGO感谢您的观看!第32页/共32页
限制150内