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