外观(Facade)模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
比如下面这种图
这里写图片描述
用户如果想调用模块A,模块B,模块C,本身不需要了解这三个模块,只需调用facade,让其去执行。那么Facade就是这几个模块的门面,即外观模式。
外观模式
以电脑开机关机为例
这里写图片描述

用户开机时不会依次点cpu开机,内存开机,而是通过电源键进行开机关机。电源键就是这些部件的门面。

创建启动和关闭的接口

public interface Action {
    void start();
    void shutDown();
}

下面让CPU, Memory,Disk继承这个接口

CPU

public class CPU implements Action {
    @Override
    public void start() {
        System.out.println("cup start");
    }

    @Override
    public void shutDown() {
        System.out.println("cup shutDown");
    }
}

磁盘

public class Disk implements Action {
    @Override
    public void start() {
        System.out.println("disk start");
    }

    @Override
    public void shutDown() {
        System.out.println("disk end");
    }
}

内存

public class Memory implements Action {
    @Override
    public void start() {
        System.out.println("memory start");
    }

    @Override
    public void shutDown() {
        System.out.println("memory end");
    }
}

下面创建门面类Facade

public class Facade {
    private CPU cpu;
    private Disk disk;
    private Memory memory;
    public  Facade(){
        this.cpu = new CPU();
        this.disk = new Disk();
        this.memory = new Memory();
    }
    public void start(){
        cpu.start();
        disk.start();
        memory.start();
    }
    public void shutDown(){
        cpu.shutDown();
        disk.shutDown();
        memory.shutDown();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.start();
        facade.shutDown();
    }
}

结果是:
cup start
disk start
memory start
cup shutDown
disk end
memory end

优点
1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值