设计模式——外观模式

介绍

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

意图

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

解决

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

优点

  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 @   Geoary  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示