1. 看看雷总家

点击查看【bilibili】

雷总的家很炫酷吧

2. 提出问题

你又没有想过一个问题, 雷总家一开门, 各种电器就自动开始工作, 怎么用程序去控制呢?

3. 铁憨憨写法

让某些铁憨憨同学, 去写代码实现, 肯定是在开门的操作里, 写了一堆逻辑

  1. public void openDoor(){
  2. ......
  3. 开灯();
  4. 开窗帘();
  5. 开电视();
  6. 开空调();
  7. ......
  8. }

今天十个电器, 在开门的函数中要写10行代码,
明天加一个电器, 在开门的函数中再加一行代码
后天加100个电器, 在开门的函数中再加100行代码,

一开始开门函数挺稳定的, 可是天天改这个函数, 代码越来越臃肿
铁憨憨同学感觉到心很累, 每次家里添加一个设备都要修改开门函数
他想寻求改变

4. 观察者模式

如果使用观察者模式就很好解决啦

4.1 定义观察者接口

  1. public interface OpenDoorListener {
  2. void onDoorOpen();
  3. }

4.2 实现接口

  1. public class 空调 implements OpenDoorListener{
  2. @Override
  3. public void onDoorOpen() {
  4. //开门后打开空调
  5. }
  6. }
  1. public class 客厅灯 implements OpenDoorListener{
  2. @Override
  3. public void onDoorOpen() {
  4. //开门后打开客厅灯
  5. }
  6. }

4.3 实现门的开门函数

  1. public class {
  2. public void 开门(List<OpenDoorListener> observerList){
  3. for (OpenDoorListener observer : observerList) {
  4. observer.onDoorOpen();
  5. }
  6. }
  7. }

这时候即使有一万个家具设备 需要跟开门这个动作联动都不怕了, 只需要每个家具各自实现在开门的时候需要干什么就OK了

完全不需要再修改开门的函数