1. 看看雷总家
雷总的家很炫酷吧
2. 提出问题
你又没有想过一个问题, 雷总家一开门, 各种电器就自动开始工作, 怎么用程序去控制呢?
3. 铁憨憨写法
让某些铁憨憨同学, 去写代码实现, 肯定是在开门的操作里, 写了一堆逻辑
public void openDoor(){
......
开灯();
开窗帘();
开电视();
开空调();
......
}
今天十个电器, 在开门的函数中要写10行代码,
明天加一个电器, 在开门的函数中再加一行代码
后天加100个电器, 在开门的函数中再加100行代码,
一开始开门函数挺稳定的, 可是天天改这个函数, 代码越来越臃肿
铁憨憨同学感觉到心很累, 每次家里添加一个设备都要修改开门函数
他想寻求改变
4. 观察者模式
4.1 定义观察者接口
public interface OpenDoorListener {
void onDoorOpen();
}
4.2 实现接口
public class 空调 implements OpenDoorListener{
@Override
public void onDoorOpen() {
//开门后打开空调
}
}
public class 客厅灯 implements OpenDoorListener{
@Override
public void onDoorOpen() {
//开门后打开客厅灯
}
}
4.3 实现门的开门函数
public class 门 {
public void 开门(List<OpenDoorListener> observerList){
for (OpenDoorListener observer : observerList) {
observer.onDoorOpen();
}
}
}
这时候即使有一万个家具设备 需要跟开门这个动作联动都不怕了, 只需要每个家具各自实现在开门的时候需要干什么就OK了
完全不需要再修改开门的函数