设计模式——外观模式

介绍

隐蔽系统复杂性,并向客户端提供一个可以访问系统的接口。该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

意图

为一个子系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更方便使用。

解决

降低复杂系统内部子系统是的复杂度,简化客户端与之的接口。

优点

  1. 减少系统相互依赖;

  2. 提高灵活度;

  3. 提高安全性。

缺点

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

使用场景

去医院看病,可能要挂号、门诊、开药、取药等步骤,都得患者或家属去,若有专门得接待人员,只让接待人员来处理,对患者来说更方便。

UML

示例

定义组件接口 Original.java

package cn.geoaryblog.design.cretedg.facade;

public interface Original {
    void startup();
    void shutdowm();
}

CPU实现组件接口 CPU.java

package cn.geoaryblog.design.cretedg.facade;

public class CPU implements Original {
    @Override
    public void startup() {
        System.out.println("CPU开始工作");
    }

    @Override
    public void shutdowm() {
        System.out.println("CPU停止工作");
    }
}

硬盘实现组件接口 Disk.java

package cn.geoaryblog.design.cretedg.facade;

public class Disk implements Original {
    @Override
    public void startup() {
        System.out.println("硬盘开始工作");
    }

    @Override
    public void shutdowm() {
        System.out.println("硬盘停止工作");
    }
}

内存时间组件接口 Memory.java

package cn.geoaryblog.design.cretedg.facade;

public class Memory implements Original {
    @Override
    public void startup() {
        System.out.println("内存开始工作");
    }

    @Override
    public void shutdowm() {
        System.out.println("内存停止工作");
    }
}

电脑对外提供使用 Computer.java

package cn.geoaryblog.design.cretedg.facade;

public class Computer implements Original{
    private CPU cpu;
    private Memory memory;
    private Disk disk;
    public Computer(){
        cpu = new CPU();
        memory = new Memory();
        disk = new Disk();
    }

    @Override
    public void startup() {
        cpu.startup();
        memory.startup();
        disk.startup();
    }

    @Override
    public void shutdowm() {
        cpu.shutdowm();
        memory.shutdowm();
        disk.shutdowm();
    }
}

客户端调用 Client.java

package cn.geoaryblog.design.cretedg.facade;

public class Clinet {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.startup();
        // CPU开始工作 
        // 内存开始工作
        // 硬盘开始工作
        System.out.println("================");
        computer.shutdowm();
        // CPU停止工作
        // 内存停止工作
        // 硬盘停止工作
    }
}
posted @ 2022-03-06 18:00  Geoary  阅读(40)  评论(0)    收藏  举报