设计模式之门面模式

前端之家收集整理的这篇文章主要介绍了设计模式之门面模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

门面模式又是一“依赖注入”的例子,和前面讲的策略模式和代理模式有共通之处。

直接举个例子吧。用户早上起床这个过程,由睁眼、起身、下床三个有序的动作组成。

因为有序,所以,如果把这三个动作的调用都交给用户,就可能出现无序操作(总有些SB的),进而导致逻辑错误。为了避免这种情况,于是,门面模式将这三个有序的动作都封装到一个操作中,并将这个操作的调用公开,然后,用户调用这个操作就可安全有序的完成那三个动作了。说白了,就是内部操作隐藏,做个门面给别人看。

先定义一个借口:

  1. package _7th_Facade;
  2.  
  3. public interface IMorning {
  4. void zhengyan();//睁眼
  5. void qishen();//起身
  6. void xiachuan();//下床
  7. }

然后实现接口:

  1. package _7th_Facade;
  2.  
  3. public class MonringOperation implements IMorning {
  4.  
  5. @Override
  6. public void qishen() {
  7. System.out.println("我起身");
  8. }
  9.  
  10. @Override
  11. public void xiachuan() {
  12. System.out.println("我下床");
  13. }
  14.  
  15. @Override
  16. public void zhengyan() {
  17. System.out.println("我睁开眼");
  18. }
  19.  
  20. }

门面类(含封装的操作):

  1. package _7th_Facade;
  2.  
  3. public class Facade {
  4. IMorning human = null;
  5. public Facade(IMorning human) {//依赖注入:因为需要调用睁眼等动作,所以需要IMorning对象,于是通过构造函数传进来。
  6. this.human = human;
  7. }
  8. public void getup(){//对于getup起床过程,下面三个动作是有先后顺序的,所以由getup方法按时间顺序封装。
  9. human.zhengyan();//用户调用时就不用操心具体操作,直接调用getup方法即可有序完三个动作
  10. human.qishen();
  11. human.xiachuan();
  12. }
  13. }

调用测试:

  1. public static void main(String[] args) {
  2. Facade facade = new Facade(new MonringOperation());
  3. facade.getup();
  4. }
这个模式比较简单,没啥好多说。记住核心——依赖注入对象,有序动作封装。想更深入了解可以结合前面的策略模式和代理模式着来看。

猜你在找的设计模式相关文章