JAVA设计模式之【外观模式】
通过引入一个外观角色来简化客户端与子系统之间的交互。
顾客无需直接和茶叶、茶具、开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可。
通过引入一个外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
角色
外观角色Facade
子系统角色SubSystem
有点像MVC的概念,Model层专门处理数据库,M层就是数据库的外观角色,C层作为客户来调用数据库。
看例子
电风扇系统
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/19.
*/
public class Fan
{
public void on()
{
System.out.println("风扇打开!");
}
public void off()
{
System.out.println("风扇关闭!");
}
}
空调系统
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/18.
*/
public class AirConditioner
{
public void on()
{
System.out.println("空调打开!");
}
public void off()
{
System.out.println("空调关闭!");
}
}
电灯系统
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/19.
*/
public class Light
{
private String position;
public Light(String position)
{
this.position=position;
}
public void on()
{
System.out.println(this.position + "灯打开!");
}
public void off()
{
System.out.println(this.position + "灯关闭!");
}
}
电视系统
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/19.
*/
public class Television
{
public void on()
{
System.out.println("电视机打开!");
}
public void off()
{
System.out.println("电视机关闭!");
}
}
统一开关外观
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/19.
*/
public class GeneralSwitchFacade {
private Light lights[]=new Light[4];
private Fan fan;
private AirConditioner ac;
private Television tv;
public GeneralSwitchFacade()
{
lights[0]=new Light("左前");
lights[1]=new Light("右前");
lights[2]=new Light("左后");
lights[3]=new Light("右后");
fan=new Fan();
ac=new AirConditioner();
tv=new Television();
}
public void on()
{
lights[0].on();
lights[1].on();
lights[2].on();
lights[3].on();
fan.on();
ac.on();
tv.on();
}
public void off()
{
lights[0].off();
lights[1].off();
lights[2].off();
lights[3].off();
fan.off();
ac.off();
tv.off();
}
}
客户端统一调用外观进行操作
package Facade.SwitchFacade;
/**
* Created by Jiqing on 2016/10/19.
*/
public class Client
{
public static void main(String args[])
{
GeneralSwitchFacade gsf=new GeneralSwitchFacade();
gsf.on();
System.out.println("-----------------------");
gsf.off();
}
}
结果
左前灯打开!
右前灯打开!
左后灯打开!
右后灯打开!
风扇打开!
空调打开!
电视机打开!
左前灯关闭!
右前灯关闭!
左后灯关闭!
右后灯关闭!
风扇关闭!
空调关闭!
电视机关闭!
JAVA设计模式之【外观模式】的更多相关文章
- java设计模式之外观模式(门面模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计 ...
- Java设计模式之五 ----- 外观模式和装饰器模式
前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...
- 【JAVA设计模式】外观模式(Facade Pattern)
一 定义 为子系统中的一组接口提供一个一致的界面.Facade模式定义了一个高层的接口,这个接口使得这一子系统更加easy使用. 二 案例 一个子系统中拥有3个模块.每一个模块中都有3个方法.当中 ...
- Java设计模式之外观模式和最少知识原则
外观模式: 外观模式:提供一个统一的接口,来访问子系统中一群功能相关接口(类似一键启动,一键关闭等等) 外观模式定义了一个高层接口,让子系统更容易使用 降低对外接口耦合度 外观模式和命令模式各自侧重点 ...
- java设计模式之外观模式
外观模式概念 外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个搞层次接口,使得这一个子系统更加容易使用.这一模式完美的体现了依赖倒转原则和迪米特法则的思想,所以是非常常 ...
- 由一名保安引发的Java设计模式:外观模式
目录 应用场景 外观模式 定义 意图 主要解决问题 何时使用 优缺点 结构 保安的故事 应用场景 使用方要完成一个功能,需要调用提供方的多个接口.方法,调用过程复杂时,我们可以再提供一个高层接口(新的 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...
- 每天一个设计模式-2 外观模式(Facade)
每天一个设计模式-2 外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
随机推荐
- 大型Web 站点 Asp.net Session过期你怎么办
在 WEB 系统中. 我们通常会用session来保存一些简单可是却非常重要的信息.比方Asp.net中常常会用Session来保存用户登录信息,比方UserID.为了解决 WEB场大家採用了把ses ...
- NSAttributedString编程
- (void)viewDidLoad { [super viewDidLoad]; NSMutableAttributedString *attributedString ...
- hdoj--1162--Eddy's picture(最小生成树)
Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- netty结构
一.先纵览一下Netty,看看Netty都有哪些组件? 为了更好的理解和进一步深入Netty,我们先总体认识一下Netty用到的组件及它们在整个Netty架构中是怎么协调工作的.Netty应用中必不可 ...
- filezilla的root账户无法连接服务器解决办法
lz一直都是用filezilla上传文件到vm虚拟机的,用的是ubuntu14.04的系统.最近自己重新搭了lamp去做thinkphp的学习,lz有两个账户,一个是kin,另外一个是root.大家都 ...
- 循环引用的weak和assgin
__weak 当对象销毁后weakSelf指向的地址为nil __unsafe_unretained 挡圈对象销毁后,weakSelf执行的地址为不变,而地址对应对象已经销毁,再次访问该对象就崩溃,相 ...
- 方括号在sqlserver中的作用
我也很无奈啊... 竟然还有这个技能...建个表试试? 显然不行... 再检查下表结构吧 前方小前辈有点坑... selelct [group] from tablle 可以了√ 应该是把[方括号 ...
- Oracle学习系类篇(三)
1. 存储过程 CREATE OR REPLACE PROCEDURE SP_NAME( PM_NAME [IN/OUT/IN OUT] PM_TYPE...) {AS} ...
- (转)Django学习之 第一章:Django介绍
Django: Python编程Web框架 如果你上djangoproject.com你会发现对Django的如下解释: “Django is a high-level Python Web fram ...
- table标签 在谷歌和ie浏览器下不同的表现效果
在项目中有了一个这样的需求: 我需要利用vue的模板语法v-for循环生成tr,这个tr是需要双重循环来确定其个数的, 我的实现: 我在tr外面包了一个template标签, 效果: 谷歌浏览器下实现 ...