【设计模式】结构型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

最新文章

  1. 《FaceBook效应》——读后总结
  2. gzip的使用
  3. Oracle 11g新特性延迟段创建和truncate的增强
  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
  5. iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
  6. listview分页
  7. 机器学习之多变量线性回归(Linear Regression with multiple variables)
  8. Pythonxy下载链接
  9. 自己写的一个android小应用 手电筒
  10. 尽量使用ToUpper比较,避免使用ToLower
  11. mysql语句中使用like后面的%(百分号)的问题
  12. Vold工作流程分析学习
  13. mvc 三个 之间 肮脏的交易
  14. Xcode 打包(Shell)
  15. Windows编写的shell脚本,在linux上无法执行
  16. pandas的基本功能(一)
  17. Docker exec 宿主对容器执行命令 - 五
  18. 基于ELK和Python搭建简单的监控告警系统
  19. 题目1001:A+B for Matrices
  20. oracle库和表空间

热门文章

  1. 转:spring MVC HTTP406 Not Acceptable
  2. Linux性能测试 uptime命令
  3. python 教程 第十一章、 异常
  4. 带农历日历的DatePicker控件!Xamarin控件开发小记
  5. Android手势识别的发展
  6. C# 获取系统Icon、获取文件相关的Icon
  7. 微软Insider Dev Tour 活动
  8. WPF 动态绑定listview的列内容
  9. Binding的详细说明
  10. SQLite 的版本问题