Android设计模式

Android设计模式-22-外观模式

2018-06-21  本文已影响71人  今阳说

1. 定义

2. 使用场景

  1. 为复杂的模块或子系统提供外界访问的接口
  2. 子系统相对独立
  3. 预防低水平人员带来的风险

3. 优缺点

4. Android源码中的使用:

Context封装了很多操作,如startActivity(),sendBroadcast(),bindServiced()等,相当于抽象外观类,Context的子系统中去实现这些方法,如ActivityManagerService实现startActivity(),PackageManagerService实现包信息相关方法,ContextImpl则是Context的实现类,也就是外观类,其内部调用这些子系统的实现,而Activity相当于客户端,其上两层父类ContextWrapper中有个一个Context类型的mBase字段,其实际类型是ContextImpl,是对外观类的调用,例如ContextWrapper中:

  @Override
  public Resources getResources() {
        return mBase.getResources();
  }

5. 实例演示

以智能家居,统一管理家电为例

  1. 各种家电作为子系统,如灯,电视,空调等
  public class Light {
        public void on() {
            LjyLogUtil.i("开灯...");
        }

        public void off() {
            LjyLogUtil.i("关灯...");
        }
    }

    public class Televison {
        public void on() {
            LjyLogUtil.i("开电视...");
        }

        public void off() {
            LjyLogUtil.i("关电视...");
        }
    }

    public class Aircondition {
        public void on() {
            LjyLogUtil.i("开空调...");
        }

        public void off() {
            LjyLogUtil.i("关空调...");
        }
    }
  1. 智能遥控器作为外观类(现在很多有红外功能的Andorid手机都有智能遥控器app, 比如我常用的遥控精灵就挺好用,不用再去抱着一大堆的各种遥控器)
 /**
     * 智能遥控器
     */
    public class SmartControl {
        private Light mLight = new Light();
        private Televison mTelevison = new Televison();
        private Aircondition mAircondition = new Aircondition();

        /**
         * 开所有电器
         */
        public void allOn() {
            lightOn();
            tvOn();
            airOn();
        }

        /**
         * 关所有电器
         */
        public void allOff() {
            lightOff();
            tvOff();
            airOff();
        }

        public void lightOn() {
            mLight.on();
        }

        public void lightOff() {
            mLight.off();
        }

        public void tvOn() {
            mTelevison.on();
        }

        public void tvOff() {
            mTelevison.off();
        }

        public void airOn() {
            mAircondition.on();
        }

        public void airOff() {
            mAircondition.off();
        }
    }
  1. 通过外观类去操作各子系统
private void methodFacadePattern() {
       SmartControl smartControl = new SmartControl();
       smartControl.airOn();
       smartControl.airOff();
       smartControl.tvOn();
       smartControl.tvOff();
       smartControl.allOn();
       smartControl.allOff();
   }
上一篇 下一篇

猜你喜欢

热点阅读