文档章节

一天一种设计模式之十一-----外观模式

tongqu
 tongqu
发布于 2016/03/19 00:49
字数 744
阅读 111
收藏 7

一.外观模式简介

  1. 外观模式属于结构型模式。

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

  3. 当你要为一个复杂的系统提供一个简单的接口时,子系统往往因为不断演化而变的越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具有可重用性,更容易对子系统进行定制,但这也会给那些不需要定制子系统的用户带来一些使用上的困难。

  4. 外观模式为了解决3的痛点,提供了一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过外观层。

  5. 客户程序与抽象类的实现部分存在着很大的依赖性,引入外观模式可以将这个子系统与客户以及其他子系统分离,可以提高子系统的独立性和可移植性。

  6. 优点:

    1. 引入外观模式,客户对子系统的使用变得简单了。减少了与子系统的关联对象,实现了子系统与客户之间的松耦合。

    2. 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类

    3. 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程。

  7. 缺点:

    1. 不能很好的限制客户使用子系统类,如果堆客户访问子系统做太多的限制则减少了灵活性和可变性。

    2. 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源码,违背了开闭原则。

  8. 个人感觉,外观类只不过把具体的业务逻辑模块化了,这样的聚合在层次鲜明,耦合本身比较低或者逻辑流程比较统一的业务中值得考虑,但但业务流转的太复杂有可能导致父系统上面又聚合父系统,这样层次关系会很乱。所以这种模式不值得在复杂多变的逻辑处理中推荐。

二.测试代码

public class WaiguanMoshiTest {
    public static void main(String[] args) {
        Facade facade=new Facade();
        facade.methodA();
        facade.methodB();
    }
}
interface ServiceA{
    void methodA();
}
interface ServiceB{
    void methodB();
}
interface ServiceC{
    void methodC();
}
class ServiceAimpl implements ServiceA{

    @Override
    public void methodA() {
        System.out.println("服務a");
    }
    
}
class ServiceBimpl implements ServiceB{

    @Override
    public void methodB() {
        System.out.println("服務b");
    }
    
}
class ServiceCimpl implements ServiceC{

    @Override
    public void methodC() {
        System.out.println("服務c");
    }
    
}
class Facade{
    ServiceA serviceA;
    ServiceB serviceB;
    ServiceC serviceC;
    public Facade(){
        serviceA=new ServiceAimpl();
        serviceB=new ServiceBimpl();
        serviceC=new ServiceCimpl();
    }
    public void methodA(){
        serviceA.methodA();
        serviceB.methodB();
    }
    public void methodB(){
        serviceB.methodB();
        serviceC.methodC();
    }
    public void methodC(){
        serviceC.methodC();
        serviceA.methodA();
    }
}







© 著作权归作者所有

tongqu
粉丝 38
博文 37
码字总数 26162
作品 0
海淀
私信 提问
加载中

评论(1)

byteRun
byteRun
解耦
设计模式学习笔记十四:适配器模式、桥接模式与外观模式

1.适配器模式与桥接模式的区别和联系 适配器模式和桥接模式都是间接引用对象,因此可以使系统更灵活,在实现上都涉及从自身以外的一个接口向被引用的对象发出请求。 两种模式的区别在于使用场...

长平狐
2013/06/17
116
0
设计模式什么的哪有那么神秘 ----第一集 一些吐槽和重构的韵味

一日面试, ...... Hr:你对设计模式熟悉吗? 应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟. Hr:你用过外观...

架构梦想
2013/08/04
396
7
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
214
0
javascript设计模式与应用

javascript设计模式与应用 目录 构造函数模式 工厂模式 单例模式 代理模式 观察者模式 适配器模式 装饰器模式 迭代器模式 外观模式 状态模式 命令模式 前言 设计模式真的很多很复杂,建议有兴...

夏天来喽
04/06
0
0
JavaScript设计模式总结

之前看过《JavaScript设计模式与开发实践》这本书,对书中的设计模式和一些相关案例也有了一定的了解,同时把这些设计模式的应用对应在在一些其他的项目中,进行了一些整理,如下仅供参考: ...

jefferyE
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
41
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部