外观模式设计系列教程_第1页
外观模式设计系列教程_第2页
外观模式设计系列教程_第3页
外观模式设计系列教程_第4页
外观模式设计系列教程_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/1外观模式设计系列教程

1.概述

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

2.模式中的角色

外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。

子系统类集合(SubSystemClasses):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。

3.模式解读

外观模式的类图

外观模式的代码实现

///

///子系统中的一个类///

publicclassSubSystemOne{publicvoidMethodeOne(){("SubSystemfirstmethod.");}}///

///子系统中一个类///

publicclassSubSystemTwo{publicvoidMethodTwo(){("SubSystemsecondmethod.");}}///

///子系统中一个类///

publicclassSubSystemThree{publicvoidMethodThree(){("SubSystemthirdmethod.");}}///

///子系统中一个类///

publicclassSubSystemFour{publicvoidMethodFour(){("SubSystemfourthmethod.");}}///

///外观类///

publicclassFacade{privateSubSystemOneone;privateSubSystemTwotwo;privateSubSystemThreethree;privateSubSystemFourfour;publicFacade(){one=newSubSystemOne();two=newSubSystemTwo();three=newSubSystemThree();four=newSubSystemFour();}publicvoidMethodA(){("nMethodgroupA");();();();}publicvoidMethodB(){("nMethodgroupB");();();}}

客户端代码

classProgram{staticvoidMain(stringargs){//由于Facade的作用,客户端可以根本不知道子系统类的存在Facadefacade=newFacade();();();();}}

运行结果

4.模式总结

优点

Facade模式降低了客户端对子系统使用的复杂性。

外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。

通过合理使用Facade,可以帮助我们更好的划分访问的层次。

缺点

过多的'或者是不太合理的Facade也容易让人迷惑,到底是调用Facade好呢,还是直接调用模块好。

适用场景

需要将设计进行分层时考虑Facade模式。

在开发阶段,子系统往往因为重构变得越来越复杂,增加外观模式可以提供一个简单的接口,减少它们之间的依赖。

在维护一个遗留的大型系统时,可以这个系统已经非常难以维护和扩展,可以为新系统开发一个Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

5.应用举例:分层开发中,对数据访问层我们增加DataAccess作为对外的接口来操作数据库子系统。

实现类图

实现代码

publicclassEmployee{publicstringName{get;set;}publicintAge{get;set;}publicSalarySalary{get;set;}}publicclassSalary{publicDateTimeFrom{get;set;}publicDateTimeTo{get;set;}publicdecimalAmount{get;set;}}publicclassEmployeeDataAccess{publicvoidSaveEmployee(Employeeemployee){("Saveemployeetodatabase.");}publicvoidDeleteEmployee(Employeeemployee){("Remodeemployeefromdatabase.");}}publicclassSalaryDataAccess{publicvoidSaveSalary(Salarysalary){("Savesalarytodatabase.");}publicvoidDeleteSalary(Salarysalary){("Removesalaryfromdatabase.");}}///

///DataAccess为客户端提供一个简单的接口///

publicclassDataAccess{privateEmployeeDataAccessemployeeDataAccess=newEmployeeDataAccess();privateSalaryDataAccesssalaryDataAccess=newSalaryDataAccess();publicvoidSaveEmployee(Employeeemployee){//先保存员工基本信息(employee);//保存员工薪水信息();}publicvoidRemoveEmployee(Employeeemployee){//先删除员工薪水信息();//删除员工基本信息(employee);}}

客户端代码

classProgram{staticvoidMain(stringargs){dataAccess=new();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论