今天我来全面总结一下Android开发中最常用的设计模式 -外观模式。
其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析 工厂方法模式(Factory Method)- 最易懂的设计模式解析 抽象工厂模式(Abstract Factory)- 最易懂的设计模式解析 策略模式(Strategy Pattern)- 最易懂的设计模式解析 适配器模式(Adapter Pattern)- 最易懂的设计模式解析 代理模式(PRoxy Pattern)- 最易懂的设计模式解析 模板方法模式(Template Method) - 最易懂的设计模式解析 建造者模式(Builder Pattern)- 最易懂的设计模式解析 外观模式(Facade Pattern) - 最易懂的设计模式解析
定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。
通过创建一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以通过调用外观类的方法来调用内部子系统中所有方法
如下图:
给个网站的导航例子你就懂了:以前我需要在搜索栏逐个搜索网站地址;有了网站导航(用了外观模式)后,就方便很多了
接下来我用一个实例来对建造者模式进行更深一步的介绍。 a. 实例概况
背景:小成的爷爷已经80岁了,一个人在家生活:每次都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;冲突:行动不方便,走过去关闭那么多电器很麻烦,代码如下:1. 电器类:
//灯类public class SubSystemA_Light { public void on(){ System.out.println("打开了灯...."); } public void off(){ System.out.println("关闭了灯...."); } } //电视类public class SubSystemB_Television { public void on(){ System.out.println("打开了电视...."); } public void off(){ System.out.println("关闭了电视...."); } } //空调类public class SubSystemC_Aircondition { public void on(){ System.out.println("打开了电视...."); } public void off(){ System.out.println("关闭了电视...."); } }2. 客户端调用:小成爷爷使用电器情况
public class Facade Pattern{ public static void main(String[] args){ { SubSystemA_Light light = new SubSystemA_Light(); SubSystemB_Television television = new SubSystemB_Television(); SubSystemC_Aircondition aircondition = new SubSystemC_Aircondition(); //起床后开电器 System.out.prinln("起床了"); light.on(); television.on(); aircondition.on(); System.out.prinln("可以看电视了"); //睡觉时关电器 System.out.prinln("睡觉了"); light.off(); television.off(); aircondition.off(); System.out.prinln("可以睡觉了"); } }结果
起床了打开了灯打开了电视打开了空调可以看电视了睡觉了关闭了灯关闭了电视关闭了空调可以睡觉了从上面可以看出,在不使用外观模式的情况下,小成爷爷需要对每个电器都进行操作,非常不方便
客户端与三个子系统都发送了耦合,使得客户端程序依赖与子系统
小成买了一个智能家具控制器(外观对象/统一接口)给他爷爷,他爷爷只需要一键就能打开/关闭 灯、电视机、空调
即用外观模式来为所有子系统设计一个统一的接口 客户端只需要调用外观类中的方法就可以了,简化了客户端的操作1. 电器类同上
2. 外观类:智能遥控器
public class Facade{ SubSystemA_Light light; SubSystemB_Television television ; SubSystemC_Aircondition aircondition; //传参 public Facade(SubSystemA_Light light,SubSystemB_Television television,SubSystemC_Aircondition aircondition){ this.light = light; this.television = television ; this.aircondition =aircondition; } //起床后一键开电器 public void on{ System.out.prinln("起床了"); light.on(); television.on(); aircondition.on(); } //睡觉时一键关电器 System.out.prinln("睡觉了"); light.off(); television.off(); aircondition.off(); } }3. 客户端调用:爷爷使用智能遥控器的时候
public class Facade Pattern{ public static void main(String[] args){ { //实例化电器类 SubSystemA_Light light = new SubSystemA_Light(); SubSystemB_Television television = new SubSystemB_Television(); SubSystemC_Aircondition aircondition = new SubSystemC_Aircondition(); //传参 Facade facade = new Facade(light,television,aircondition); //客户端直接与外观对象进行交互 facade.on; System.out.prinln("可以看电视了"); facade.off; System.out.prinln("可以睡觉了");结果
起床了打开了灯打开了电视打开了空调可以看电视了睡觉了关闭了灯关闭了电视关闭了空调可以睡觉了在全面解析完后,我来分析下其优缺点:
降低了客户类与子系统类的耦合度,实现了子系统与客户之间的松耦合关系
只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类 减少了与子系统的关联对象,实现了子系统与客户之间 的松耦合关系,松耦合使得子系统的组件变化不会影响到它的客户。外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
引入外观角色之后,用户只需要与外观角色交互; 用户与子系统之间的复杂逻辑关系由外观角色来实现降低原有系统的复杂度和系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
本文主要对外观模式进行了全面介绍,接下来将介绍其他设计模式,有兴趣可以继续关注Carson_Ho的最易懂的设计模式解析笔记!!!!
相关文章阅读 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析 工厂方法模式(Factory Method)- 最易懂的设计模式解析 抽象工厂模式(Abstract Factory)- 最易懂的设计模式解析 策略模式(Strategy Pattern)- 最易懂的设计模式解析 适配器模式(Adapter Pattern)- 最易懂的设计模式解析 代理模式(Proxy Pattern)- 最易懂的设计模式解析 模板方法模式(Template Method) - 最易懂的设计模式解析 建造者模式(Builder Pattern)- 最易懂的设计模式解析 外观模式(Facade Pattern) - 最易懂的设计模式解析
新闻热点
疑难解答