博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外观模式(Facade Pattern)
阅读量:4967 次
发布时间:2019-06-12

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

定义:
 
定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。
 
解决的问题:
 
  • 避免了系统与系统之间的高耦合度
  • 使得复杂的子系统用法变得简单

 

uml类图:

 

 
模式组成:
  • Facade:外观角色。是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组成
  • Subsystem classes:子系统角色。实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关信息;即没有指向Facade的实例
  • client:客户角色。调用facade角色获得完成相应的功能
 
优点:
 
  • 降低了客户类与子系统类的耦合度,实现了子系统与客户之间的松耦合关系
  • 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单
  • 降低原有系统的复杂度和系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
 
缺点:
 
  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
  • 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
 
应用:
 
举个栗子:
 
定义外观角色
class Computer {    Memory memory;    Cpu cpu;    public Computer() {        memory = new Memory();        cpu = new Cpu();    }    public void start() {        memory.start();        cpu.start();    }}

定义子系统角色

class Memory {    public void start() {        System.out.println("memory start!");    }}

 

定义子系统角色

class Cpu {    public void start() {        System.out.println("cpu start!");    }}

客户端调用

public static void main(String[] args) {                      Computer c = new Computer();                      c.start();            }

转载于:https://www.cnblogs.com/amei0/p/8057589.html

你可能感兴趣的文章
redis连接数据库
查看>>
ubuntu频繁死机--独立显卡问题
查看>>
网络流---最大流(Edmond-Karp算法)的学习
查看>>
jvm(13)-线程安全与锁优化
查看>>
网络流24题——太空飞行计划问题(最大权闭合图)
查看>>
HTTP状态码
查看>>
RunLoop(运行循环)-002-加载大图
查看>>
eclipse中修改tomcat的配置,解决全局性的get提交乱码问题
查看>>
UI: 使用 UIViewController 展现和管理视图
查看>>
编译器会强制没有数据成员的对象长度非零
查看>>
键盘13事件
查看>>
前端----css总结
查看>>
python 终极篇 cookie与session
查看>>
iOS Socket编程-C语言版(UDP)
查看>>
Swift开源项目精选
查看>>
Android Fragment详解(一):概述
查看>>
二叉树深度
查看>>
六种方式读取properties资源文件
查看>>
[LeetCode] Combinations
查看>>
客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)...
查看>>