首页 > 其他分享 >外观设计模式

外观设计模式

时间:2024-09-05 10:25:45浏览次数:11  
标签:外观 子类 模式 public 子系统 Facade method 外观设计

外观模式(Facade模式)

 

当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。

 

 

 

外观(Facade)模式的定义

是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

 

外观(Facade)模式是“迪米特法则”的典型应用

外观模式主要优点

  1. 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  2. 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
  3. 降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。

外观(Facade)模式的主要缺点如下

  1. 不能很好地限制客户使用子系统类。
  2. 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

 

外观(Facade)模式包含以下主要角色

  

  1. 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
  2. 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
  3. 客户(Client)角色:通过一个外观角色访问各个子系统的功能。

 

附上代码例子:

第一个子类:

public class Child01 {
    public void method(){
        System.out.println("第一个子类调用");
    }
}

第二个子类:

public class Child02 {
    public void method(){
        System.out.println("第二个子类调用");
    }
}

第三个子类

public class Child03 {
    public void method(){
        System.out.println("第三个子类调用");
    }
}

 

父类:

ublic class Facade {
    private Child01 child01= new Child01();
    private Child02 child02= new Child02();
    private Child03 child03= new Child03();
    public void method(){
        child01.method();
        child02.method();
        child03.method();
    }
}

这就是外观者模式

 

 

 



标签:外观,子类,模式,public,子系统,Facade,method,外观设计
From: https://blog.51cto.com/liFrans/11926360

相关文章

  • 【适配器】设计模式:旧系统迁移与第三方库集成的解决方案
    引言适配器设计模式是一种结构设计模式,它允许将一个类的接口转换成客户端期望的另一个接口。适配器让那些接口不兼容的类可以一起工作。这种模式在系统集成、插件开发和第三方库集成中尤为重要。核心组件:目标接口(ITarget):期望的接口,要转化成的接口定义,客户端将使用这个接......
  • 手游后端架构中,用命令模式解决什么问题
    Hello,大家好,我是V哥。命令模式(CommandPattern)是一种行为设计模式,它将一个请求封装为一个对象,从而允许用户使用不同的请求、队列或日志请求来参数化其他对象。命令模式也支持可撤销的操作。在手游后端架构中,命令模式可以将玩家的操作请求(如移动、攻击、技能释放等)封装成......
  • 51单片机 - 定时器0(按键控制LED流水灯模式)
    时间:2024.9.2目的:手撕51作者:Whappy定时器0寄存器配置1.定时器0配置过程首先要配置定时器的寄存器TCON和TMOD使计数器开始计数及定时器的初始值,配置使这个链路连起来。#include<REGX52.H>voidTimer0_Init(){ TMOD=0x01;//工作模式寄存器 //控制寄存器 TF......
  • 数字人直播阿凡达模式2.0版本揭秘:灰豚运用了哪些黑技术?
    随着数字人直播的应用频率不断提升,其在帮助企业降本增效方面的潜力也随之显现,刺激市场需求的同时,也让用户对它的期待值持续增长。在此背景下数字人源码厂商开始不断加大研发力度,以推动数字人直播技术的持续升级,数字人直播阿凡达模式2.0版本的上线便是典型案例之一。本期,小编......
  • C#设计模式入门实战教程
    思维导航什么是设计模式设计模式的作用设计模式分类创建型模式(CreationalPatterns)结构型模式(StructuralPatterns)行为型模式(BehavioralPatterns)C#实现的设计模式示例代码推荐学习书籍项目源码地址优秀项目和框架精选什么是设计模式设计模式是对面向对象设计中......
  • 设计模式-离线并发模式-隐含锁(Implicit Lock)
    作用允许框架或层超类型代码来获取离线锁锁机制应该由应用隐含的完成,而不是由开发人员编写代码完成,这样可以避免编写锁代码的疏忽而造成的数据不一致等情况。实现机制实现隐含锁就是要分解代码,在应用程序框架中完成那些无法逾越的锁机制。在悲观离线锁的任务中,会出现两......
  • 设计模式-粗粒度锁(Coarse-Grained Lock)
    作用用一个锁所住一组相关的对象粗粒度锁是覆盖多个对象的单个锁,这样不仅简化了加锁行为本身,而且让你不必为了给它们加锁所而加载所有的对象。运行机制实现粗粒度锁的第一步是为一组对象建立一个控制点,使得只用一个锁就能锁住多个对象。用乐观离线锁让组中每个对象都共享......
  • 图穷匕见-所有反DDD模式都是垃圾
    本文书接上回《主观与客观,破除DDD凭经验魔咒》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。开个玩笑“我不是针对这一个问题,我是说所有的反DDD模式都是垃圾”,作为教练,在团队中我时常用这样的玩笑来......
  • 结构型设计模式—桥接模式
    结构型设计模式—桥接模式欢迎长按图片加好友,我会第一时间和你分享持续更多的开发知识,面试资源,学习方法等等。假设你要买一张新桌子,你有两个选择:一种是木制的桌子,另一种是金属制的桌子。无论你选择哪种材质,你还希望这张桌子可以有不同的颜色,比如红色、蓝色或者绿色。如......
  • C#设计模式入门实战教程
    什么是设计模式设计模式是对面向对象设计中反复出现的问题的解决方案。它们提供了被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。设计模式的作用提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代码结构或逻......