设计模式之门面模式(外观模式)

门面模式

  • 概念
  • 何时使用
  • 类图
  • 代码实例

概念

当类A和多个类交互时,并且调用其方法很乱时,为了降低类之间的耦合性,符合迪米特最少知识法则,专门抽出一个类,并且提供出几个简单明了的接口给A类,那么具体的复杂方法调用交给此类进行管理,该类就是为门面类。

何时使用

在开发的时候,我们采用分层思想,控制层、逻辑层、持久层。每层之间使用门面类进行交互。 还有就是在开发过程中,使用各种设计模式导致有很多很小的类,这个时候为了降低类的耦合度,专门提供Facade提供一个简单接口。

当我们接触到很复杂的老系统,我们又不想去重构,但是有些功能现在必须要使用的,使用门面模式也很合适。提供一个简单的接口给新系统使用,让这个Facade和老系统交互所有复杂工作。

在这里插入图片描述

类图

在这里插入图片描述

代码实例

Facade 门面类

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description 门面类
 **/
public class Facade {

    private SubSystem1 subSystem1;
    private SubSystem2 subSystem2;
    private SubSystem3 subSystem3;
    private SubSystem4 subSystem4;
    private SubSystem5 subSystem5;
    private SubSystem6 subSystem6;

    public Facade(){
        subSystem1 = new SubSystem1();
        subSystem2 = new SubSystem2();
        subSystem3 = new SubSystem3();
        subSystem4 = new SubSystem4();
        subSystem5 = new SubSystem5();
        subSystem6 = new SubSystem6();

    }


    public void methodA(){
        subSystem1.m1();
        subSystem3.m3();
        subSystem5.m5();
    }

    public void methodB(){
        subSystem2.m2();
        subSystem4.m4();
        subSystem6.m6();
    }

}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem1 {

    public void m1(){
        System.out.println("SubSystem1 m1");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem2 {

    public void m2(){
        System.out.println("SubSystem2 m2");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem3 {

    public void m3(){
        System.out.println("SubSystem3 m3");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem4 {

    public void m4(){
        System.out.println("SubSystem4 m4");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem5 {

    public void m5(){
        System.out.println("SubSystem5 m5");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem6 {

    public void m6(){
        System.out.println("SubSystem6 m6");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class Client {
    public static void main(String[] args) {
         Facade facade = new Facade();
         facade.methodA();
         facade.methodB();
    }
}

输出结果

SubSystem1 m1
SubSystem3 m3
SubSystem5 m5
SubSystem2 m2
SubSystem4 m4
SubSystem6 m6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值