深入理解Java设计模式之外观模式

 更新时间:2021年11月08日 09:28:58   作者:一指流砂~  
这篇文章主要介绍了JAVA设计模式之外观模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下

一、什么是外观模式

定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。

外观模式组成:

Facade:负责子系统的的封装调用

Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务

二、外观模式的使用场景

1、设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式;

2、开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口;

3、维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

三、外观模式的优缺点

优点:

1、实现了子系统与客户端之间的松耦合关系;
2、客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

缺点:

1、不符合开闭原则,如果要修改某一个子系统的功能,通常外观类也要一起修改;

2、没有办法直接阻止外部不通过外观类访问子系统的功能,因为子系统类中的功能必须是公开的(根据需要决定是否使用internal访问级别可解决这个缺点,但外观类需要和子系统类在同一个程序集内)。

四、外观模式的实现

先写出四个子系统的类

class SubSystemOne
{
    public void MethodOne()
    {
        Console.WriteLine("子系统方法一");
    }
}
class SubSystemTwo
{
    public void MethodTwo()
    {
        Console.WriteLine("子系统方法二");
    }
}
class SubSystemThree
{
    public void MethodThree()
    {
        Console.WriteLine("子系统方法三");
    }
}
class SubSystemFour
{
    public void MethodFour()
    {
        Console.WriteLine("子系统犯法四");
    }
}

引入外观类,减少子系统类之间的交互

class Facade
{
    SubSystemOne one;
    SubSystemTwo two;
    SubSystemThree three;
    SubSystemFour four;
    public Facade()
    {
        one = new SubSystemOne();
        two = new SubSystemTwo();
        three = new SubSystemThree();
        four = new SubSystemFour();
    }
    public void MethodA()
    {
        Console.WriteLine("\n方法组合A()---");
        one.MethodOne();
        two.MethodTwo();
        four.MethodFour();
    }
    public void MethodB()
    {
        Console.WriteLine("\n方法组B()---");
        two.MethodTwo();
        three.MethodThree();
    }
}

客户端代码:

static void Main(string[] args)
{
    Facade facade = new Facade();
    facade.MethodA();
    facade.MethodB();
    Console.Read();
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 详解Java如何优雅的处理异常

    详解Java如何优雅的处理异常

    在编写 Java 程序的过程中,有一种异常几乎每个开发者都会遇到——空指针异常(NullPointerException),那么我们应该如何有效且优雅的处理空指针异常呢,下面小编就来详细介绍这个处理方案吧
    2023-08-08
  • springboot2如何集成ElasticSearch6.4.3

    springboot2如何集成ElasticSearch6.4.3

    这篇文章主要介绍了springboot2如何集成ElasticSearch6.4.3问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springboot+jsonp解决前端跨域问题小结

    springboot+jsonp解决前端跨域问题小结

    这篇文章主要介绍了springboot+jsonp解决前端跨域问题小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Swagger接口文档和常用注解的使用

    详解Swagger接口文档和常用注解的使用

    Swagger是一款遵循 Restful 风格的接口文档开发神器,支持基于 API 自动生成接口文档。本文将为大家讲讲Swagger接口文档和常用注解的使用方法,需要的可以参考一下
    2022-08-08
  • mybatis-plus3.0.1枚举返回为null解决办法

    mybatis-plus3.0.1枚举返回为null解决办法

    这篇文章主要介绍了mybatis-plus3.0.1枚举返回为null解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MapStruct处理Java中实体与模型间不匹配属性转换的方法

    MapStruct处理Java中实体与模型间不匹配属性转换的方法

    今天小编就为大家分享一篇关于MapStruct处理Java中实体与模型间不匹配属性转换的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java实现斗地主简化版

    Java实现斗地主简化版

    这篇文章主要为大家详细介绍了Java实现斗地主简化版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Java中的ReentrantLock实现原理及代码演示

    Java中的ReentrantLock实现原理及代码演示

    这篇文章主要介绍了Java中的ReentrantLock实现原理及代码演示,非公平锁 如果已经进入队列,链表里面的线程是先进先出,如果已经释放了锁,在抢占锁时,链表里面的头结点和还没有入队列的线程抢锁,需要的朋友可以参考下
    2024-01-01
  • Java中equals()知识点总结

    Java中equals()知识点总结

    在本篇文章里小编给大家分享的是关于Java中equals()知识点总结内容,需要的朋友们可以学习参考下。
    2020-03-03
  • Java设置session超时的几种方式总结

    Java设置session超时的几种方式总结

    这篇文章主要介绍了Java设置session超时的几种方式总结的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论