门面模式又是一“依赖注入”的例子,和前面讲的策略模式和代理模式有共通之处。
直接举个例子吧。用户早上起床这个过程,由睁眼、起身、下床三个有序的动作组成。
因为有序,所以,如果把这三个动作的调用都交给用户,就可能出现无序操作(总有些SB的),进而导致逻辑错误。为了避免这种情况,于是,门面模式将这三个有序的动作都封装到一个操作中,并将这个操作的调用公开,然后,用户调用这个操作就可安全有序的完成那三个动作了。说白了,就是内部操作隐藏,做个门面给别人看。
先定义一个借口:
package _7th_Facade; public interface IMorning { void zhengyan();//睁眼 void qishen();//起身 void xiachuan();//下床 }
然后实现接口:
package _7th_Facade; public class MonringOperation implements IMorning { @Override public void qishen() { System.out.println("我起身"); } @Override public void xiachuan() { System.out.println("我下床"); } @Override public void zhengyan() { System.out.println("我睁开眼"); } }
门面类(含封装的操作):
package _7th_Facade; public class Facade { IMorning human = null; public Facade(IMorning human) {//依赖注入:因为需要调用睁眼等动作,所以需要IMorning对象,于是通过构造函数传进来。 this.human = human; } public void getup(){//对于getup起床过程,下面三个动作是有先后顺序的,所以由getup方法按时间顺序封装。 human.zhengyan();//用户调用时就不用操心具体操作,直接调用getup方法即可有序完三个动作 human.qishen(); human.xiachuan(); } }
调用测试:
public static void main(String[] args) { Facade facade = new Facade(new MonringOperation()); facade.getup(); }这个模式比较简单,没啥好多说。记住核心——依赖注入对象,有序动作封装。想更深入了解可以结合前面的策略模式和代理模式着来看。