当前位置: 首页 > news >正文

9 外观模式(Facade)

外观模式是为了解决类与类之间的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例)

 
 
 
  1. package com.liubo.patterns.facade;
    /**
     * 
     * @author liubo
     *
     */
    public class CPU {
    	public void startup() {
    		System.out.println("cpu startup");
    	}
    	public void shutdown() {
    		System.out.println("cpu shutdown");
    	}
    }
    

      


  1. package com.liubo.patterns.facade;
    /**
     * @author liubo
     *
     */
    public class Memory {
    	public void startup() {
    		System.out.println("memory startup");
    	}
    	public void shutdown() {
    		System.out.println("memory shutdown");
    	}
    }
    

      

  2. package com.liubo.patterns.facade;
    /**
     * @author liubo
     *
     */
    public class Disk {
    	public void startup() {
    		System.out.println("disk startup");
    	}
    	public void shutdown() {
    		System.out.println("disk shutdown");
    	}
    }
    

      

    /**
     * 
     */
    package com.liubo.patterns.facade;
    /**
     * @author liubo
     *
     */
    public class Computer {
    	private CPU cpu;
    	private Memory memory;
    	private Disk disk;
    	/**
    	 * @param cpu
    	 * @param memory
    	 * @param disk
    	 */
    	public Computer() {
    		this.cpu = new CPU();
    		this.memory = new Memory();
    		this.disk = new Disk();
    	}
    	public void startup() {
    		System.out.println("start the computer");
    		cpu.startup();
    		memory.startup();
    		disk.startup();
    		System.out.println("start computer finished");
    	}
    	public void shutdown() {
    		System.out.println("begin to shutdown");
    		cpu.shutdown();
    		memory.shutdown();
    		disk.shutdown();
    		System.out.println("computer closed");
    	}
    

      

    /**
     * 
     */
    package com.liubo.patterns.facade;
    /**
     * @author liubo
     *
     */
    public class Computer {
    	private CPU cpu;
    	private Memory memory;
    	private Disk disk;
    	/**
    	 * @param cpu
    	 * @param memory
    	 * @param disk
    	 */
    	public Computer() {
    		this.cpu = new CPU();
    		this.memory = new Memory();
    		this.disk = new Disk();
    	}
    	public void startup() {
    		System.out.println("start the computer");
    		cpu.startup();
    		memory.startup();
    		disk.startup();
    		System.out.println("start computer finished");
    	}
    	public void shutdown() {
    		System.out.println("begin to shutdown");
    		cpu.shutdown();
    		memory.shutdown();
    		disk.shutdown();
    		System.out.println("computer closed");
    	}
    

      


 
//output
start the computer
cpu startup
memory startup
disk startup
start computer finished
begin to shutdown
cpu shutdown
memory shutdown
disk shutdown
computer closed
 
如果我们没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用,这,就是外观模式!



来自为知笔记(Wiz)



转载于:https://www.cnblogs.com/liubo6/p/4563429.html

相关文章:

  • 线程的同步与死锁
  • 用TinySpider进行网页抓取实例
  • UI图像拖动更换
  • Mysql避免全表扫描sql查询优化 .
  • LR杂记 - 性能測试指标及经常使用的监控工具
  • linux常见问题汇总
  • jps命令
  • 招投标流程
  • 从零开始教你制作友善之壁TINY4412----SD卡uboot启动卡
  • Linux centos 连接网络
  • Action代理类的工作
  • 字符串中的转义字符与字符串的长度
  • 测试图片
  • php排序
  • 使用tomcat数据源(JNDI)
  • __proto__ 和 prototype的关系
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Apache Zeppelin在Apache Trafodion上的可视化
  • bootstrap创建登录注册页面
  • IP路由与转发
  • java 多线程基础, 我觉得还是有必要看看的
  • JS实现简单的MVC模式开发小游戏
  • LeetCode29.两数相除 JavaScript
  • LeetCode算法系列_0891_子序列宽度之和
  • MySQL主从复制读写分离及奇怪的问题
  • node 版本过低
  • 程序员最讨厌的9句话,你可有补充?
  • 聚簇索引和非聚簇索引
  • 跳前端坑前,先看看这个!!
  • 阿里云ACE认证之理解CDN技术
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​虚拟化系列介绍(十)
  • "无招胜有招"nbsp;史上最全的互…
  • #define
  • (10)ATF MMU转换表
  • (12)Linux 常见的三种进程状态
  • (175)FPGA门控时钟技术
  • (4)事件处理——(7)简单事件(Simple events)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ZT)出版业改革:该死的死,该生的生
  • (八)Flask之app.route装饰器函数的参数
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (三分钟)速览传统边缘检测算子
  • (图)IntelliTrace Tools 跟踪云端程序
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原)本想说脏话,奈何已放下
  • .cn根服务器被攻击之后
  • .dwp和.webpart的区别
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net对接阿里云CSB服务