外观模式——让生活看起来更简单

目录

一、基础简介

1、定义

2、使用场景

3、优缺点

 4、结构图

二、“买房”的外观模式实例

1、“买房”的过程图

2、SubSystem 子系统角色

3、Facade

4、Client_Facade

5、结果


一、基础简介

1、定义

为子系统中的一组接口提供一个一致的界面;
定义一个高层接口,使得这一子系统更加容易使用

2、使用场景

  • 1、为复杂的模块或子系统提供外界访问的模块。
  • 2、降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

3、优缺点

外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点。

  1. 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  2. 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
  3. 降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。

外观(Facade)模式的主要缺点如下。

  1. 不能很好地限制客户使用子系统类。
  2. 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

 4、结构图

外观(Facade)模式包含以下主要角色。

  1. 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
  2. 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
  3. 客户(Client)角色:通过一个外观角色访问各个子系统的功能。

二、“买房”的外观模式实例

1、“买房”的过程图

在买房的过程中,客户的操作是比较繁琐的,这个时候找到Facade外观类(也就是现实生活中的中介),就可以简单的搞定

2、SubSystem 子系统角色

package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem01_SelectRoom {

    public void selectRoom(){
        System.out.println("客户选择好了房源");
    }
}
package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem02_Sign {

    public void sign(){
        System.out.println("签订购房合同");
    }
}
package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem03_Procedure {

    public void procedure(){
        System.out.println("办理一系列手续");
    }
}
package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem04_Tollage {

    public void tollage(){
        System.out.println("交税");
    }
}
package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem05_Credential {

    public void credential(){
        System.out.println("拿到房产证");
    }
}

3、Facade

package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:37
 */
public class Facade_BuyRoom {

    private SubSystem01_SelectRoom selectRoom;
    private SubSystem02_Sign sign;
    private SubSystem03_Procedure procedure;
    private SubSystem04_Tollage tollage;
    private SubSystem05_Credential credential;

    // 需要知道子系统的细节
    public Facade_BuyRoom() {
        selectRoom = new SubSystem01_SelectRoom();
        sign = new SubSystem02_Sign();
        procedure = new SubSystem03_Procedure();
        tollage = new SubSystem04_Tollage();
        credential = new SubSystem05_Credential();
    }

    public void buyRoom(){
        System.out.println("买房开始");
        selectRoom.selectRoom();
        sign.sign();
        procedure.procedure();
        tollage.tollage();
        credential.credential();
        System.out.println("买房结束");
    }
}

4、Client_Facade

package com.mfc.design.外观模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:46
 */
public class Client_Facade {

    public static void main(String[] args) {
        Facade_BuyRoom facade_buyRoom = new Facade_BuyRoom();
        facade_buyRoom.buyRoom();
    }
}

5、结果

买房开始
客户选择好了房源
签订购房合同
办理一系列手续
交税
拿到房产证
买房结束

Process finished with exit code 0

发布了101 篇原创文章 · 获赞 176 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36095679/article/details/102547545