博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——外观模式详解
阅读量:5363 次
发布时间:2019-06-15

本文共 1862 字,大约阅读时间需要 6 分钟。

0. 前言

写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~

当我们开发Android的时候,无论是SDK还是封装API,我们在不经意之间就会使用到外观模式,它通过一个外观类使得整个系统的结构只有一个统一的高层接口,对用户屏蔽各个子功能系统的实现,从而可以降低用户的使用成本。

 

1. 外观模式模式介绍

外观模式定义:

外部与一个或多个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得子系统的调用更加方便。

 

外观模式的使用场景:

1)在开发阶段,子系统会因为不断的重构演化而变得越来越复杂或者被整体替换,这种易变性给外部调用它们的用户带来了使用上的困难,使用外观模式可以提供一个简单的接口,减少它们之间的依赖

2)如果完成一个功能需要子系统协调完成,可以通过外观接口屏蔽这个子系统之间的交互逻辑。否则用户在使用时容易出错。

 

外观模式包括的角色:

1Facade:外观类,系统对外的统一接口,将客户端的请求代理给相应的子系统对象。

2Subsystem:子系统类,实现子系统的功能,注意子系统类不含有外观类的引用。

 

2. 外观模式模式实例介绍

通过上面给出的角色类,我们可以实现一个简单的实例,电视遥控器是现实生活中一个比较好的外观模式的运用,遥控器(外观类)可以控制电源的开关(子系统A)、频道的切换(子系统B)等功能。遥控器统一对这些子模块的控制,而不是在用户使用时通过多个遥控器来分别完成上述功能。

下面我们就来通过外观模式模拟一下遥控器系统,代码也比较简单:

// 外观类public class TvController {    private PowerSystem mPowerSystem = new PowerSystem();    private ChannelSystem mChannelSystem = new ChannelSystem();    public void powerOn() {        mPowerSystem.powerOn();    }    public void powerOff() {        mPowerSystem.powerOff();    }    public void nextChannel() {        mChannelSystem.next();    }    public void prevChannel() {        mChannelSystem.prev();    }}//子系统类//电源子系统类class PowerSystem {    public void powerOn() {        System.out.println("开机");    }    public void powerOff() {        System.out.println("关机");    }}//频道子系统类class ChannelSystem {    public void next() {        System.out.println("下一频道");    }    public void prev() {        System.out.println("上一频道");    }}//使用时TvController controller = new TvController();controller. powerOn();controller. nextChannel ();controller. prevChannel ();controller. powerOff();

//运行结果开机下一频道上一频道关机

从上面客户端的使用代码可以看出,外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观类对象controller即可调用相关功能。

 

3. 外观模式的优点

1)对客户隐藏子系统细节,减少了客户与子系统之间的耦合,可以方便地应对子系统的变化。

2)毫无疑问方便了用户的使用。

转载于:https://www.cnblogs.com/qitian1/p/6461461.html

你可能感兴趣的文章
【.NET】使用HtmlAgilityPack抓取网页数据
查看>>
typedef的使用
查看>>
基于位置的本地商铺个性化推荐
查看>>
职场上一个人情商高的十种表现
查看>>
【底层原理】深入理解Cache (下)
查看>>
Elasticsearch安装中文分词插件IK
查看>>
进阶4:常见函数-单行函数
查看>>
简述企业信息化与企业架构关系
查看>>
npoi List 泛型导出
查看>>
ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
查看>>
T-sql表表达式
查看>>
async await 原理吸收
查看>>
leetcode算法:Next Greater Element I
查看>>
ionic 调用百度地图API,并定位当前位置示例
查看>>
关于MFC程序运行阶段出现试图执行的操作不受支持
查看>>
流程图怎么画?分享绘制流程图简单方法
查看>>
squid的处理request和reply的流程
查看>>
硬件_陀螺仪
查看>>
C#读取MySql表字段出现System.Byte[]问题
查看>>
三、winForm-DataGridView操作——DataGridView 操作复选框checkbox
查看>>