欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    设计模式外观模式.pptx

    • 资源ID:80094154       资源大小:374.73KB        全文页数:32页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    设计模式外观模式.pptx

    问题问题(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.WriteLine(查询银行信息,客户名 +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)static 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.HasGoodCredit(customer)eligible=false;Console.WriteLine(客户 +customer.Name+已经被 +(eligible?通过:拒绝);Console.ReadLine();可以看到,客户程序与三个子系统都发生了耦合,这种耦合使得客户程序依赖于子系统,当子系统化时,客户程序也将面临很多变化的挑战。第4页/共32页主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4第5页/共32页外观模式外观模式(Facade)(Facade)模式动机模式名称:外观模式(Facade)将一个系统划分为若干个子系统有利于降低系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统中较一般的设置提供了一个单一而简单的界面。第6页/共32页外观模式外观模式(Facade)(Facade)模式动机外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观(Facade)对象进行。就如同医院的接待员一样,外观模式的外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。第7页/共32页外观模式外观模式(Facade)(Facade)模式动机在没有外观类(Facade)之前,客户类(Client)需要和子系统类(Subsystem)进行复杂的交互,系统的耦合度很大;而增加一个外观类之后,客户类只需要直接和外观类交互,子系统类之间的复杂关系由外观类来实现,从而降低了系统的耦合度。第8页/共32页外观模式外观模式(Facade)(Facade)模式定义 外观模式(Facade):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是对象的结构模式。第9页/共32页外观模式外观模式(Facade)(Facade)一个合理的设计就是为这些子系统创建一个统一的接口,这个接口将简化客户程序的判断操作。引入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.HasSufficientSavings(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 eligable=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();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.HasGoodCredit(customer)eligible=false;Console.WriteLine(客户 +customer.Name+已经被 +(eligible?通过:拒绝);Console.ReadLine();第13页/共32页外观模式外观模式(Facade)(Facade)模式结构 第14页/共32页外观模式外观模式(Facade)(Facade)参与者 Facade:外观角色 SubSystem:子系统角色第15页/共32页外观模式外观模式(Facade)(Facade)保安系统例子一个保安系统由两个录像机、三个电灯、一个遥感器和一个警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。第16页/共32页外观模式外观模式(Facade)(Facade)保安系统例子第17页/共32页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassCamerapublicvoidTurnOn()Console.WriteLine(Turningonthecamera.);publicvoidTurnOff()Console.WriteLine(Turningoffthecamera.);publicvoidRotate(intdegrees)Console.WriteLine(Rotatingthecameraby0degrees.,degrees);第18页/共32页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassLightpublicvoidTurnOff()Console.WriteLine(Turningonthelight.);publicvoidTurnOn()Console.WriteLine(Turningoffthelight.);publicvoidChangeBulb()Console.WriteLine(changingthelight-bulb.);第19页/共32页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassSensorpublicvoidActivate()Console.WriteLine(Activatingthesensor.);publicvoidDeactivate()Console.WriteLine(Deactivatingthesensor.);publicvoidTrigger()Console.WriteLine(Thesensorhastriggered.);第20页/共32页外观模式外观模式(Facade)(Facade)保安系统例子Client对象需要引用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象。publicclassAlarmpublicvoidActivate()Console.WriteLine(Activatingthealarm.);publicvoidDeactivate()Console.WriteLine(Deactivatingthealarm.);publicvoidRing()Console.WriteLine(Ringingthealarm.);publicvoidStopRing()Console.WriteLine(Stopthealarm.);第21页/共32页外观模式外观模式(Facade)(Facade)保安系统例子publicstaticvoidMain(stringargs)privatestaticCameracamera1,camera2;privatestaticLightlight1,light2,light3;privatestaticSensorsensor;privatestaticAlarmalarm;camera1=newCamera();camera2=newCamera();light1=newLight();light2=newLight();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页外观模式外观模式(Facade)(Facade)外观模式publicclassSecurityFacadeprivatestaticCameracamera1,camera2;privatestaticLightlight1,light2,light3;privatestaticSensorsensor;privatestaticAlarmalarm;staticSecurityFacade()camera1=newCamera();camera2=newCamera();light1=newLight();light2=newLight();light3=newLight();sensor=newSensor();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.Deactivate();第25页/共32页外观模式外观模式(Facade)(Facade)外观模式publicstaticvoidMain(stringargs)privatestaticSecurityFacadesecurity;security=newSecurityFacade();security.Activate();Console.WriteLine(n-n);security.Deactivate();第26页/共32页外观模式外观模式(Facade)(Facade)外观模式的优缺点如下外观模式的优点主要有以下几点:它对客户屏蔽子系统组件,减少了客户处理的对象数目使得子系统使用起来更加容易。它实现了子系统与客户之间的松耦合关系。这使得子系统的组件变化不会影响到它的客户。提高了安全性,通过外观模式,屏蔽子系统业务逻辑。第27页/共32页外观模式外观模式(Facade)(Facade)外观模式的优缺点如下它简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其它的子系统。它并不限制复杂应用使用子系统类。外观模式并不增加任何功能性模式,它仅仅是一些简单化接口。第28页/共32页外观模式外观模式(Facade)(Facade)模式使用在以下情况可以使用外观模式:当要为一个复杂子系统提供一个简单接口时。这个接口对大多数用户来说已经足够好;那些需要更多可定制性的用户可以越过Facade层。子系统相对独立外界只需黑箱操作即可。例如利息计算。预防操作人员带来的风险扩散。第29页/共32页外观模式外观模式(Facade)(Facade)模式应用子系统可以有多个外观。外观不参与子系统的业务逻辑。第30页/共32页第31页/共32页LOGO感谢您的观看!第32页/共32页

    注意事项

    本文(设计模式外观模式.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开