外观模式

大话设计模式:外观模式

↘锁芯ラ 提交于 2019-12-13 03:58:09
一、什么是外观模式 为子系统中的一组接口提供一个一致的界面 用一个高层接口,统一了一组底层接口,和外界交互更加方便,外部应用程序不需要关心内部子系统的具体细节,大大降低程序的复杂度,提高程序可维护性. UML图 Facade :外观类,负责将子系统的功能接口统一到一个接口 SubsysytemA : 子系统,不与客户端直接联络 Client : 只和外观类联络,减少耦合性 二、适用场景 各种代办事宜,这个事宜其实是个流程,比如你去餐馆点菜,只需要用手机扫码点菜, 餐馆服务员、 厨房大厨、帮工就都会通过这个点餐APP收到菜品,然后开始制作,客人不需要知道这个菜都有哪些人参与。再就是在一个旧的系统基础上去添加新功能,旧的系统已经很难修改和扩展了,这样在交互的时候留出接口统一到一个外观类接口,然后新人只需要编写自己的功能类然后和这个外观类交互。 三、优缺点 优点 减少系统互相依赖,减少耦合性 提高灵活性,可复用性高 提高安全性,只和朋友联络 缺点 增加了一层中介层 不符合开闭原则 四、大话中的例子 买股票还是买基金的问题: 买股票就是耦合太高,个人需要和所有想要买得股票耦合,调研学习,然后只单只的购买。但是基金不一样,基金个人只需要关注一只基金,这只基金会去和市面上的股票证券等金融类型打交道,对个人来说耦合性大大降低。比如有股票A、股票B、股票C、证券A、证券B,如果没有外观类,我想买

简说设计模式——外观模式

对着背影说爱祢 提交于 2019-12-09 23:12:55
简说设计模式——外观模式 一、什么是外观模式   有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。   其实本篇要说的这个设计模式就和这很有关系,由于当投资者自己买股票时,由于众多投资者对众多股票的联系太多,反而不利于操作,这在软件中就成为耦合性太高,而有了基金后,就变成众多用户只和基金打交道,关心基金的上涨和下跌,而实际上的操作确是基金经理人与股票和其它投资产品打交道,这就是外观模式。    外观模式(Facade) ,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。UML结构图如下:   其中Facade是外观角色,也叫门面角色,客户端可以调用这个角色的方法,此角色知晓子系统的所有功能和责任,将客户端的请求代理给适当的子系统对象;Subsystem是子系统角色,可以同时拥有一个或多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合,子系统并不知道门面的存在。   1. 外观类   这里我给出了四个Subsystem子系统

第十二章-外观模式

南楼画角 提交于 2019-12-08 10:37:30
外观模式(Facade): 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 它完美的体现了依赖倒转原则和迪米特法则的思想 基本代码 #include<iostream> #include<string> using namespace std; class SubSystemOne { public: void MethodOne() { cout << "子系统方法一" << endl; } }; class SubSystemTwo { public: void MethodTwo() { cout << "子系统方法二" << endl; } }; class SubSystemThree { public: void MethodThree() { cout << "子系统方法三" << endl; } }; class SubSystemFour { public: void MethodFour() { cout << "子系统方法四" << endl; } }; //外观类,它需要了解所有的子系统的方法或属性,进行组合,以备外界调用 class Facade { private: SubSystemOne *one; SubSystemTwo *two; SubSystemThree *three;

外观模式

我的梦境 提交于 2019-12-07 01:25:25
一、定义:外观模式(facade)。为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、特点:定义系统的入口,在客户端类和复杂类之间建立一层,这一层将调用顺序、依赖关系等处理好。 三、缺点:违背了开闭原则,要改东西很麻烦 四、示例代码 //子系统 public class ClassA { public void show1(){ System.out.println("print class a"); } } //子系统 public class ClassB { public void show2() { System.out.println("print class b"); } } /*外观类*/ public class SuperClass { private ClassA classA; private ClassB classB; public SuperClass() { classA = new ClassA(); classB = new ClassB(); } public void show() { classA.show1(); classB.show2(); } } //客户端类 public class Client { public static void main(String[] args)

设计模式-外观模式

橙三吉。 提交于 2019-12-07 01:10:16
外观模式是一种使用频率非常高的结构型设计模式, 它通过引入一个外观角色来简化客户端和子系统之间的交互, 为复杂的子系统提供统一的入口, 降低子系统与客户端的耦合度, 且客户端调用非常方便. 1. 外观模式概述 在软件开发中, 有时候为了完成一项较为复杂的功能, 一个客户类需要和多个业务类交互, 而这些需要交互的业务类经常作为一个整体出现, 由于涉及到的类比较多, 导致使用时候代码较为复杂, 此时特别需要一个类似服务员一样的角色, 由他来负责和多个业务类进行交互, 而客户端只需要与该类交互. 外观模式中, 引入一个新的 外观类(Facade) 来实现该功能, 外观类充当软件系统中的"服务员", 它为多个业务类的调用提供一个统一的入口, 简化了类与类之间的交互. 在外观模式中, 那些需要交互的业务类被称为 子系统(SubsSystem) . 如果没有外观类,那么每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大,如图2(A)所示;而引入外观类之后,客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度,如图2(B)所示。 在外观模式中, 一个子系统的外部与其内部的通信通过一个统一的外观类进行, 外观类将客户类和子系统的内部的复杂性分隔开, 使得客户类只需与外观角色打交道, 而不需要与子系统内部的很多对象打交道. 外观模式:

外观模式(Facade)

ε祈祈猫儿з 提交于 2019-12-06 14:22:50
1、作用 (1)、将各个子系统的接口汇聚在一起,定义一个统一的接口方便客户使用,满足“迪米特法则”,即客户不需要了解子系统,只需要知道Facade模式封装的类即可以使用所有子系统。 (2)、隔离用户和子系统,将用户与子系统解耦,当子系统有修改是,顶多修改Facade模式封装的类,无需修改用户代码。 2、实现方式 这个模式有点像适配器模式。 相同点:都是接口在套一层接口。 不同点:(1)、适配器模式,外层接口与内存层接口不一样,而外观模式一般是内存接口和外层接口一样,甚至名字都一样。 (2)、适配器模式只封装一个接口,外观模式则是封装很多子系统的接口。 下面以一个MobilePhone的大系统通过Facade模式封装子系统功能的UML图:Facade就是系统封装子系统的接口,用户通过调用系统层(Facade)的接口来调用子系统。 3、C++代码 MobilePhone.h #include <iostream> #ifndef __MOBILE_PHONE__H__ #define __MOBILE_PHONE__H__ using namespace std; class BaseBand { public: void call() { cout<<"打电话..."<<endl; } void hungup() { cout<<"挂电话..."<<endl; } }; class

【08】结构型-外观Facade模式

六眼飞鱼酱① 提交于 2019-12-06 02:34:59
一、上下文及问题 1、基本原则 系统与其他外部系统交互,有时候操作比较复杂,需要一个防腐层来增强本系统与其他系统的耦合性,对本系统封装一些对外操作的细节,达到简化的目的。 符合最少知识原则,即Least Knowledge Principle,也成为迪米特原则,Law of Demeter。 2、定义 为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 (1)界面:从一个组件外部来看这个组件,能够看到什么,就是这个组件的界面,即外观。 比如,你从一个类的外部来看这个类,那么这个类的public方法就是这个类的外观; 比如,你从一个模块外部来看这个模块,那么这个模块对外的接口就是这个模块的外观。 (2)接口:外部和内部交互的一个通道,通常是指一些方法,可以是类方法,也可以是interface方法 二、常见场景 1、系统对外部系统调用的Facade,内部系统只依赖于Facade的方法,其里头再调用外部接口,达到防腐的目的,也达到了屏蔽一些外部接口的调用细节,比如封装异常,分步调用等 2、EJB的Session Facade,对客户端屏蔽了远程调用操作,减少客户端与服务对象之间的依赖程度,把底层服务对象的接口和它们之间的复杂依赖交互通过Facade隐藏起来。 三、解决方法 外观模式的目的不是给子系统添加新的功能接口

设计模式----外观模式UML和实现代码(5个必须掌握的设计模式)

风流意气都作罢 提交于 2019-12-06 02:34:49
一、什么是外观模式? 外观模式(Facade)定义:为子系统中的一组接口提供一个一致的界面,些模式定义了一个高层接口。这个接口使得这一子系统更加容易使用。 类型:结构型模式 顺口溜:适装 桥 组享代 外 二、 外观 模式UML 三、JAVA代码实现 package com.amosli.dp.structural.facade; public class Facade { SubsystemOne one; SubsystemTwo two; SubsystemThree three; public Facade() { one = new SubsystemOne(); two = new SubsystemTwo(); three = new SubsystemThree(); } public void methodA() { System.out.println("group A:"); one.operation1(); two.operation2(); } public void methodB() { System.out.println("group B:"); three.operation3(); } } package com.amosli.dp.structural.facade; public class SubsystemOne { public

设计模式之适配模式、外观模式

孤街浪徒 提交于 2019-12-05 22:00:02
一、适配模式 1、什么是适配器 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 2、适配器分类 适配器分为,类适配器、对象适配、接口适配方式 类适配器方式采用继承方式,对象适配方式使用构造函数传递 3、适配器案例 我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标准是110V电压,而中国标准电压接口是220V,所以要想在中国用日本电饭煲,需要一个电源转换器。 1)定义日本和中国两种接口及其实现 我们先定义日本220V电源接口和实现。 110V电源接口 //日本110V 电源接口 public interface JP110VInterface { public void connect(); } 110V电源接口实现 public class JP110VInterfaceImpl implements JP110VInterface { @Override public void connect() { System.out.println("日本110V,接通电源,开始工作.."); } } 我们再定义中国220V电源接口和实现。 public interface

设计模式之适配模式、外观模式

戏子无情 提交于 2019-12-05 21:59:29
一、适配模式 1、什么是适配器 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 2、适配器分类 适配器分为,类适配器、对象适配、接口适配方式 类适配器方式采用继承方式,对象适配方式使用构造函数传递 3、适配器案例 我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标准是110V电压,而中国标准电压接口是220V,所以要想在中国用日本电饭煲,需要一个电源转换器。 1)定义日本和中国两种接口及其实现 我们先定义日本220V电源接口和实现。 110V电源接口 //日本110V 电源接口 public interface JP110VInterface { public void connect(); } 110V电源接口实现 public class JP110VInterfaceImpl implements JP110VInterface { @Override public void connect() { System.out.println("日本110V,接通电源,开始工作.."); } } 我们再定义中国220V电源接口和实现。 public interface