外观模式

大话设计模式----外观模式

╄→尐↘猪︶ㄣ 提交于 2020-04-05 18:15:13
一、外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统的操作更加容易。 二、代码: public class SubSystemOne { public void methodOne(){ System.out.println("子系统方法一"); } } public class SubSystemTwo { public void methodTwo(){ System.out.println("子系统方法二"); } } public class SubSystemThree { public void methodThree(){ System.out.println("子系统方法三"); } } public class SubSystemFour { public void methodFour (){ System.out.println("子系统方法四"); } } public class Facade { SubSystemOne subSystemOne; SubSystemTwo subSystemTwo; SubSystemThree subSystemThree; SubSystemFour subSystemFour; public Facade(){ subSystemOne = new

设计模式——外观模式

时光毁灭记忆、已成空白 提交于 2020-03-16 04:57:46
一、概念:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、UML示意图: Facade类与一系列子系统做交互,并未Client提供与这些子系统做交互的接口,Client不需要知道众多子系统的详细情况与工作细节,只需要调用Facade为外界提供的接口就能间接与各个子系统做交互了。 三、优缺点 优点: 实现了子系统与客户端之间的松耦合关系。 客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。 缺点: 不符合开发封闭原则。如果业务出现变更,则可能要直接修改外观类。 来源: https://www.cnblogs.com/winsons/p/12501575.html

门面(Facade外观)模式

房东的猫 提交于 2020-03-07 12:37:04
   门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。 医院的例子   现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一 个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系 统的各个类打交道一样,不是一件容易的事情。   首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。      上图描述的是病人在医院里的体验,图中的方框代表医院。   解决这种不便的方法便是引进门面模式,医院可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员与各个部门打交道。 门面模式的结构   门面模式没有一个一般化的类图描述,最好的描述方法实际上就是以一个例子说明。      由于门面模式的结构图过于抽象,因此把它稍稍具体点。假设子系统内有三个模块,分别是ModuleA、ModuleB和ModuleC,它们分别有一个示例方法,那么此时示例的整体结构图如下:      在这个对象图中,出现了两个角色:   ●

设计模式之外观模式

时光毁灭记忆、已成空白 提交于 2020-03-05 23:18:42
定义 又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口。 外观模式定义了一个高层接口,让子系统更容易使用。 类型 结构型 适用场景 ①、子系统越来越复杂,增加外观模式提供简单调用接口。 ②、构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。 优缺点 优点: ①、简化了调用过程,无需了解深入子系统,防止带来风险。 ②、减少系统依赖、松散耦合。 ③、更好的划分访问层次。 ④、符合迪米特法则,即最少知道原则。 缺点: ①、增加子系统、扩展子系统行为容易引入风险。 ②、不符合开闭原则。 代码实现 案例:用户需要在支付宝的会员中心,通过支付积分兑换商品,则兑换流程大致是:校验商品库存–>积分校验–>积分支付–>生成物流。上面四个流程可以分别看做子系统,将这四个流程的逻辑封装为一个商品兑换的外观类。 首先创建一个商品类: public class Product { private String name ; public Product ( String name ) { this . name = name ; } public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } } 这里只记录了商品的name属性

外观模式

独自空忆成欢 提交于 2020-03-03 13:40:41
1. 什么是外观模式 外观模式(Facade Pattern)门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 2. 外观模式例子 用户注册完之后,需要调用阿里短信接口、邮件接口、微信推送接口。 public interface EamilSmsService { public void sendSms ( ) ; } public class EamilSmsServiceImpl implements EamilSmsService { public void sendSms ( ) { System . out . println ( "发送邮件消息" ) ; } } //微信消息推送 public interface WeiXinSmsService { public void sendSms ( ) ; } public class WeiXinSmsServiceImpl implements WeiXinSmsService { @Override public void sendSms ( ) { System . out . println ( "微信发送消息" ) ;

外观模式

随声附和 提交于 2020-03-03 07:03:15
外观模式 作用:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。提高子系统的独立性和可移植性.简化了类之间的依赖关系 使用场景: 当你要为一个复杂子系统提供一个简单接口时 客户程序与抽象类的实现部分之间存在着很大的依赖性 当你需要构建一个层次结构的子系统时 代码示例 # include <iostream> using namespace std ; //创建一个形状的抽象接口shape class shape { public : shape ( ) { } ; virtual ~ shape ( ) { } ; virtual void draw ( ) = 0 ; } ; //创建实现形状抽象接口的实体类rectangle class rectangle : public shape { public : rectangle ( ) { } ; ~ rectangle ( ) { } ; void draw ( ) ; } ; void rectangle :: draw ( ) { cout << "rectangle::draw()" << endl ; } //创建实现形状抽象接口的实体类square class square : public

设计模式-10外观模式(Facade Pattern)

爱⌒轻易说出口 提交于 2020-03-02 19:34:47
1.模式动机 在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则(最少知道原则)”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。 2.模式定义 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称为门面模式 。 属于 对象结构型模式 。 它是 迪米特法则 的典型应用。 3.模式结构 外观(Facade)模式包含以下主要角色: 外观(Facade)角色:为多个子系统对外提供一个共同的接口。 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。 客户(Client)角色:通过一个外观角色访问各个子系统的功能。 4.模式代码 # 子系统角色 * 3 public class SubSystem01 { public void f01() { System.out.println(

12.外观模式

六眼飞鱼酱① 提交于 2020-03-01 10:07:07
影院管理项目 传统方式解决影院管理 传统方式解决影院管理问题分析 在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程 不利于在ClientTest 中,去维护对子系统的操作 解决思路:定义一个高层接口,给子系统中的一组接口提供一个 一致的界面( 比如在高层接口提供四个方法 ready, play, pause, end ) ,用来访问子系统中的一群接口 也就是说, 就是通过定义一个一致的接口(界面类),用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 => 外观模式 外观模式 基本介绍 外观模式(Facade) ,也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式通过定义一个一致的接口,用以 屏蔽内部子系统的细节 ,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 外观模式的原理类 原理类图的说明( ( 外观模式的角色) ) 外观类(Facade) : 为调用端提供统一的调用接口, 外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象 调用者(Client): 外观接口的调用者 子系统的集合:指模块或者子系统,处理Facade

Dot Net设计模式—外观模式

跟風遠走 提交于 2020-02-29 07:31:49
1.概述1.1意图 外观模式定义了一个将子系统的一组接口集成在一起的高层接口,以提供一个一致的界面。通过这个界面,其他系统可以方便地调用子系统中的功能,而忽略子系统内部发生的变化。1.2使用场合 在如下情况下可以使用外观模式。(1)为一个比较复杂的子系统提供一个简单的接口。(2)将客户程序与子系统的实现部分分离,提高子系统的独立性和可移植性。(3)简化子系统间的依赖关系。1.3 结构 下图所示为外观模式的结构。由于该模式的引入,所以外界访问通过这个统一接口进行,系统的复杂性得到降 上天保佑收录: http://gnhao.blog.163.com/blog/static/719145320135139746163/ http://blog.sina.com.cn/s/blog_5676ce6b0101ef69.html http://blog.tianya.cn/blogger/post_read.asp?BlogID=4545397&PostID=51297129 低。 在实际中,我们不仅可以从软件逻辑上划分出子系统或者独立的功能模块,并且可以通过将它们封装为某一类型的组件,使其在物理上获得独立。不仅可以单独使用,还有利于系统的升级。 在Windows系统下,可以将一个软件划分后的部分封装为动态接库。然后由主程序调用这些动态接库,封装在动态库中的类(或功能模块

外观模式

痴心易碎 提交于 2020-02-22 15:52:26
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 Hospital类 1 package top.bigking.facade; 2 3 /** 4 * @Author ABKing 5 * @since 2020/2/22 下午2:40 6 **/ 7 public class School { 8 public School() { 9 System.out.println("学校"); 10 } 11 } School类 1 package top.bigking.facade; 2 3 /** 4 * @Author ABKing 5 * @since 2020/2/22 下午2:40 6 **/ 7 public class School { 8 public School() { 9 System.out.println("学校"); 10 } 11 } Bank类 1 package top.bigking.facade; 2 3 /** 4 * @Author ABKing 5 * @since 2020/2/22 下午2:44 6 **/ 7 public class Bank { 8 public Bank() { 9