设计模式——外观模式

引言

网上有很多介绍设计模式系列的优秀文章,看懂不一定是真懂,能写出来,说出个1、2、3点才算是真的懂了,如果能灵活的应用到工作中才算是真的熟练。

1、模式场景

餐馆里面只要跟接待员说:来一份鱼香肉丝。服务员会把这道菜端到你面前,至于中间的下单、烹饪、上菜等细节,我们并不关心。

2、模式结构

Facade: 外观角色(模拟场景中的接待员)
SubSystem:子系统角色(模拟场景中下单、烹饪、上菜服务)

3、示例代码

3.1、外观角色

public class Receptionist {

    private OrderOfficer orderOfficer;
    private Cook cook;
    private Waiter waiter;

    public Receptionist(){
        orderOfficer = new OrderOfficer();
        cook = new Cook();
        waiter = new Waiter();
    }

    public void service(String name){
        //下单
        orderOfficer.saveOrder(name);
        //烹饪
        cook.cooking(name);
        //上菜
        waiter.waiter(name);
    }
}

3.2、子系统(下单)

public class OrderOfficer {
    public void saveOrder(String name){
        System.out.println(name + "下单成功");
    }
}

3.3、子系统(烹饪)

public class Cook {
    public void cooking(String name){
        System.out.println(name + "烹饪完成");
    }
}

3.4、子系统(上菜)

public class Waiter {
    public void waiter(String name){
        System.out.println(name + "端到用户的桌上");
    }
}

3.5、客户端测试

public class Client {
    public static void main(String[] args) {
        Receptionist receptionist = new Receptionist();
        receptionist.service("鱼香肉丝");
    }
}

控制台输出:

鱼香肉丝下单成功
鱼香肉丝烹饪完成
鱼香肉丝端到用户的桌上

4、模式优点

  • 客户端与子系统松耦合,客户端代码变得简单。
  • 提供了统一访问的入口,子系统的修改不会应该到外观系统的代码。

5、模式缺点

  • 不引入抽象外观类的情况下,新增子系统会影响到外观系统的代码。

结束语

JDK中的日志框架Logger使用了外观模式,也称门面模式。下一篇:设计模式——代理模式。

你可能感兴趣的:(设计模式,设计模式,java,外观模式,门面模式)