外观模式

基础介绍

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

涉及两个角色:
1.门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
2.子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。

实例:汽车的启动与停车

需求
启动车辆,打开车门,启动发动机,踩油门
停车,踩刹车,关闭发动机,关闭车门
代码实现

第一步:创建子系统角色(车门类)

//车门
public class CarDoor {

    private static CarDoor instance = new CarDoor();

    public static CarDoor getInstance(){
        return instance;
    }

    public void open(){
        System.out.println("打开车门");
    }

    public void close(){
        System.out.println("关闭车门");
    }
}

第二步:创建子系统角色(发动机类)

//发动机
public class Engine {

    private static Engine instance = new Engine();

    public static Engine getInstance(){
        return instance;
    }
    public void start(){
        System.out.println("启动发动机");
    }

    public void stop(){
        System.out.println("关闭发动机");
    }
}

第三步:创建子系统角色(油门类)

//油门
public class Accelerator {

    private static Accelerator instance = new Accelerator();

    public static Accelerator getInstance(){
        return instance;
    }

    public void run(){
        System.out.println("踩油门");
    }

}

第四步:创建子系统角色(刹车类)

public class Breaking {

    private static Breaking instance = new Breaking();

    public static Breaking getInstance(){
        return instance;
    }
    public void stop(){
        System.out.println("踩刹车");
    }
}

第五步:创建门面角色

public class Facade {

    private CarDoor carDoor;
    private Engine engine;
    private Accelerator accelerator;
    private Breaking breaking;

    public Facade() {
        this.carDoor = CarDoor.getInstance();
        this.engine = Engine.getInstance();
        this.accelerator = Accelerator.getInstance();
        this.breaking = Breaking.getInstance();
    }

    //启动车辆
    public void start(){
        carDoor.open();
        engine.start();
        accelerator.run();
    }
    //停辆
    public void stop(){
        breaking.stop();
        engine.stop();
        carDoor.close();
    }
}

测试

public class Client {

    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.start();
        System.out.println("====================");
        facade.stop();
    }
}

运行结果

总结

外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值