设计模式之外观模式

前言

本节复习结构型设计模式中的外观模式。外观模式也称门面模式。

外观模式的定义:外观模式提供了一个统一的接口,用来访问子系统红的一群接口。外观定义了一个高层接口,让子系统更容易使用。

代码实现

// 子系统 Phone 提供在手机上买火车票的接口
public class Phone {
    public void buyTicket() {
        System.out.println("buy ticket by phone ");
    }
}

// 子系统 Car 提供从租住地到车站的功能
public class Car {
    public void goStation(){
        System.out.println("坐车去车站");
    }
}   
// 子系统 Bus 提供 坐公交从车站到家的功能
public class Bus {
    public void goHome() {
        System.out.println("做公交到家了");
    }
}
// 提供给客户端的外观
public class Facade {
    // 持有对象实例进行组合
    private Phone phone;
    private Car car;
    private Bus bus;

    // 通过构造器传入,并赋值对象
    public Facade(Phone phone, Car car, Bus bus) {
        this.phone = phone;
        this.car = car;
        this.bus = bus;
    }

    // 对外部提供从租住地一路回家的接口。不必关心具体实现
    public void goHome() {
        phone.buyTicket();
        car.goStation();
        bus.goHome();
    }
}
// 外观测试类
public class FacadeTest {

    public static void main(String[] args) {
        Phone phone = new Phone();
        Car car = new Car();
        Bus bus = new Bus();
        Facade facade = new Facade(phone, car, bus);
        facade.goHome();
    }
}

UML

外观模式UML

外观模式不仅简化了接口,也将客户从子系统中解耦出来。外观模式的意图是简化接口,让客户使用子系统更加的方便。当然你也可以为客户提供多个外观简化子系统。

外观模式更加体现了多用组合,少用继承这一OO原则以及松耦合。

外观模式也体现了最少知识原则(迪米特法则):只和你的密友谈话。客户不用知道外观里面的子系统,只需要用外观提供的接口就好,不用管外观通过那些子系统实现的。

References

  • 《Head First 设计模式》
posted @ 2020-05-29 23:06  胖大星-  阅读(179)  评论(0编辑  收藏  举报