一、概述

  概念

  

  简要示意图(没有一个统一的UML图)

  

  角色

  门面角色:门面模式核心,它被客户端调用,并且熟悉子系统

   子系统角色:子系统,子系统并不知道门面的存在,门面对它来说只不过是另外一个客户端而已。

  门面模式就是迪米特法则的一个很好的实践!

二、实践

  借鉴网友的电脑启动的例子:电脑中有很多组件(比如内存,CPU等),开机的时候都会启动,用户不必一个个和他们打交道,而只需和“门面”打交道

开启门面即可!

  三个CPU,Memory,Disk类

/**
* CPU类
*
* @author Administrator
**/
public class CPU {
public void turnOn() {
System.out.println("CPU turn on...");
}
public void turnOff() {
System.out.println("CPU turn ff...");
}
}
/**
* Disk类
*
* @author Administrator
**/
public class Disk {
public void turnOn() {
System.out.println("Disk turn on...");
}
public void turnOff() {
System.out.println("Disk turn ff...");
}
}
/**
* Memory类
*
* @author Administrator
**/
public class Memory {
public void turnOn() {
System.out.println("Memory turn on...");
}
public void turnOff() {
System.out.println("Memory turn ff...");
}
}

  门面

/**
* 门面类
*
* @author Administrator
**/
public class Facade {
private CPU cpu;
private Disk disk;
private Memory memory; public Facade() {
cpu = new CPU();
disk = new Disk();
memory = new Memory();
}
public void turnOn() {
cpu.turnOn();
disk.turnOn();
memory.turnOn();
}
public void turnOff() {
cpu.turnOff();
disk.turnOff();
memory.turnOff();
}
}

  客户端使用

/**
* 客户端
* @author Administrator
**/
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.turnOn();
facade.turnOff();
}
}

  

三、改进与思考

  优点

  客户端与子系统之间松耦合

Java设计模式(12)——结构型模式之门面模式(Facade)的更多相关文章

  1. Java设计模式之结构型模式

    结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...

  2. 【设计模式】结构型06享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...

  3. 【设计模式】结构型03外观模式(Facade Pattern)

    [设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...

  4. Java设计模式(9)适配器模式(Adapter模式)

    适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用 ...

  5. Java设计模式(20)观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  6. Java设计模式(7)装饰模式(Decorator模式)

    Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...

  7. 深入探索Java设计模式(三)之装饰器模式

    装饰器模式使你可以在运行时使用类似于对象组成的技术来装饰类.这在我们希望实例化具有新职责的对象而无需对基础类进行任何代码更改的情况下尤其有用.本文是在学习完优锐课JAVA架构VIP课程—[框架源码专题 ...

  8. 设计模式---接口隔离模式之门面模式(Façade)

    前提:接口隔离模式 在组建构建过程中,某些接口之间直接的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接接口(稳定的),来隔离本来相互紧密关联的接口是一种常见的解决方案. 典型模式: 门面模 ...

  9. Java 设计模式系列(十八)备忘录模式(Memento)

    Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...

  10. Java 设计模式系列(二十)状态模式

    Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...

随机推荐

  1. Apache Commons-logging使用实例

    Apache Commons-logging使用实例 本文将介绍如何在程序中使用Apache Commons-logging author: ZJ 07-3-17 Blog: [url]http:// ...

  2. servlet api.jar是干什么的?

    支持servlet的jar包.应该叫servlet-api.jar你如果编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是 ...

  3. Mutual Training for Wannafly Union #2

    codeforces 298A. Snow Footprints 分类讨论三种情况: ①..RRRRRR…  ②..LLLLLLL… ③..RRRLLLL.. //AC by lwq: #includ ...

  4. Java中类继承、接口实现的一些要注意的细节问题

    1.接口A和接口B有相同的方法,只是返回值不同,则实现类不能同时实现这两个接口中的方法. 接口A有void C()方法,接口B有int C()方法,则无法同时实现这两个接口. Java为了弥补类单继承 ...

  5. Java连接MQ的实例, 测试类

    package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.M ...

  6. Django 模型中DateField字段

    DateField¶ class DateField([auto_now=False, auto_now_add=False, **options])¶ 这是一个使用Python的datetime.d ...

  7. springmvc(5)拦截器

    1.什么是拦截器 是指通过统一的拦截从浏览器发送到服务器的请求来完成相应服务增强 2.拦截器的基本原理 可以通过配置过滤器解决乱码问题 和过滤器非常相似 3.搭建工程 注意jar包 此时的工程是完成后 ...

  8. 用LinkedList list实现栈的功能

    package homework; public class Dog extends Pet { String strain = "dogxx"; int love=80; pub ...

  9. HDU 1275 两车追及或相遇问题(相遇和追及公式)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1275 两车追及或相遇问题 Time Limit: 2000/1000 MS (Java/Others) ...

  10. 小修改,让mvc的验证锦上添点花

    首先,mvc的客户端验证用的是jquery.validate.js, jquery.validate本身已经提供了很好的扩展功能,通过简单点配置就可以做得更好看些. 而Microsoft通过jquer ...