设计模式--------外观模式
介绍外观模式的四大问题
- 现在的写法有什么问题吗?
- 为什么要用外观模式?
- 什么是外观模式?
- 外观模式有什么好处?
使用一个例子进行问题的说明
- 假如要制作一个智能系统,要能用语音控制灯光的亮度,音乐的选择,音量的大小,电视的开关等, 现在要进入休闲模式,要打开灯光,打开电视,打开音乐
Light
public class Light {
public void on() {
System.out.println("light on");
}
public void off() {
System.out.println("light off");
}
}
Main
public class Main {
public static void main(String[] args) {
Light light = new Light();
Tv tv = new Tv();
MusicPlayer musicPlayer = new MusicPlayer();
light.on();
tv.on();
musicPlayer.on();
}
}
有什么问题?
- 可以看的出每次进入休闲模式,需要写各种电器的打开方式,一点也不直观
- 同时要关闭休闲模式还要再写一遍每个电器的关闭操作
什么是外观模式?
- 外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观模式定义了一个更高级的接口,让子系统更容易使用
使用外观模式重构代码
Light
public class Light {
public void on() {
System.out.println("light on");
}
public void off() {
System.out.println("light off");
}
}
SmartSystem
public class SmartSystem {
private Light light;
private MusicPlayer musicPlayer;
private Tv tv;
public SmartSystem(Light light, MusicPlayer musicPlayer, Tv tv) {
this.light = light;
this.musicPlayer = musicPlayer;
this.tv = tv;
}
public void restModeOn() {
light.on();
musicPlayer.on();
tv.on();
}
public void restModeOff() {
light.off();
musicPlayer.off();
tv.off();
}
}
Main
public class Main {
public static void main(String[] args) {
Light light = new Light();
Tv tv = new Tv();
MusicPlayer musicPlayer = new MusicPlayer();
SmartSystem smartSystem = new SmartSystem(light, musicPlayer, tv);
smartSystem.restModeOn();
}
}
外观模式有什么好处?
- 简化了接口
- 将客户和子系统解藕
设计原则
- 最少知识原则:减少对象之间的交互
END
不慕招式,勤修内功