【设计模式】结构型02装饰模式(Decorator Pattern)

意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用:1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。

代码:

1、我这里有一个服务接口,持有一个对外提供服务的共有方法 provide(),本接口有三个实现类,分别是音乐窗口、视频窗口和学习窗口类:

package com.pat.facade;
/**
* 外观模式,被统筹类的接口
* @author ZX
*/
public interface ServiceWindows {
//提供服务的方法
void provide();
}
/**
* 音乐播放器接口
* @author ZX
*
*/
class Music implements ServiceWindows{
@Override
public void provide() {
System.out.println("播放音乐~我的滑板鞋~滑板鞋~鞋~");
} }
/**
* 视频播放器接口
* @author ZX
*
*/
class Video implements ServiceWindows{
@Override
public void provide() {
System.out.println("播放视频~非洲农业不发达~就用金坷垃~~~");
} }
/**
* 学习资料接口
* @author ZX
*/
class Study implements ServiceWindows{
@Override
public void provide() {
System.out.println("学习资料.zip》重命名 学习资料.avi");
System.out.println("开始播放:学习资料.avi");
} }

2、外观模式核心,提供一个面板类阻止对象,本类就是外观模式的核心:

package com.pat.facade;
/**
* 外观模式核心-更高层的和新接口控制器,至于对象的创建可使用任何方式,这里采用最简单的方式
* @author ZX
*
*/
public class FacadeController {
private ServiceWindows music;
private ServiceWindows video;
private ServiceWindows studyData; public FacadeController() {
this.music = new Music();
this.video= new Video();
this.studyData= new Study();
} public void playMusic() {
music.provide();
}
public void playVideo() {
video.provide();
}
public void beginStudy() {
studyData.provide();
}
}

3、测试类:

package com.pat.facade;
/**
* 测试类
* @author ZX
*
*/
public class Test {
public static void main(String[] args) {
FacadeController fc = new FacadeController();
fc.playMusic();
fc.playVideo();
fc.beginStudy();
}
}

4、结果:

播放音乐~我的滑板鞋~滑板鞋~鞋~
播放视频~非洲农业不发达~就用金坷垃~~~
学习资料.zip》重命名 学习资料.avi
开始播放:学习资料.avi

【设计模式】结构型03外观模式(Facade Pattern)的更多相关文章

  1. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  2. 设计模式系列之外观模式(Facade Pattern)——提供统一的入口

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  3. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  4. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  5. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  6. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  7. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  8. 【UE4 设计模式】外观模式 Facade Pattern

    概述 描述 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一 ...

  9. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

随机推荐

  1. 获取浏览器的ip以及省份

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script type=& ...

  2. PV操作例题解析

    虽然自己看了书,老师讲了课,以为对PV操作理解了,可是遇到题的时候还是不会思考.以下这道题,花了非常长时间才弄明确,如今把思路写出来,大家共同探讨下. 大家都来思考: 信号量S1.S2.S3.S4分别 ...

  3. WPF中3D旋转的实现

    原文:WPF中3D旋转的实现 关于3D旋转的原理,请看Daniel Lehenbauer的文章 <Rotating the Camera with the Mouse> http://vi ...

  4. QPainter的坐标系系统的转换

    声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux 转载请注明出处. 我看了这篇文章很好很容易理解.如果看了Qt助手之后更加的形象. 前面一节 ...

  5. 文章之间的基本总结Activity生命周期

    子曰:溫故而知新,能够為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就全然掌握,那基本不大可能,所以我们须要常常回过头再细致研读几遍,以领悟到作者的思想精 ...

  6. .net元数据

    概要 现在,在.net开发平台计划,其组成编译:IL代码.资源.程序集清单和类型元数据.我们知道,IL代码就是我们编写的代码.资源就是图片文件.xml文件,及其它文件,只有不清楚的是元数据(在这里将程 ...

  7. WPF自定义控件 使用阿里巴巴图标

    原文:WPF自定义控件 使用阿里巴巴图标 上一篇介绍了 WPF自定义控件 按钮 的初步使用,在进一步介绍WPF自定义控件 按钮之前,先介绍一下如何在WPF项目中使用阿里巴巴图标,方便以后做示例. 1. ...

  8. SwiftCafe 咖啡时光 - 了解 Swift 中的闭包

    闭包(Closure) 是现代开发语言的必备特性,极大的提高了我们的开发效率. 关于闭包,你可以把它理解为一种特殊的变量或对象.简而言之,我们通常的对象,里面存储的是变量或对象的值,而闭包里面存储的是 ...

  9. JS 密码弱中强显示

    <!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" conten ...

  10. SICP 1.29-1.33

    1.29 (define (sum term a next b) (if (> a b) (+ (term a) (sum term (next a) next b)))) (define (c ...