【一天一个设计模式】—— 外观模式 (Facade Pattern)

定义

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

从定义就可以清楚的知道,外观模式就是为一个子系统定制一个外观接口,供客户端调用,这样屏蔽了子系统的复杂性,客户端可以很容易的使用子系统的功能。

外观模式的角色

外观模式的角色包括子系统角色SubSystem外观角色Facade

SubSystem: 表示一个系统的子系统或模块。

Facade: 客户端通过操作外观角色从而达到控制子系统角色的目的,其隔绝了客户端与子系统直接接触的风险。

下面通过代码了解外观模式。


笔记本开机时,内存、CPU、磁盘等等必须按一定的顺序启动,事实上我们只需要按下开机键即可完成一系列子部件的启动,开机键即为外观角色Facade,一系列子部件即为子系统角色SubSystem

首先创建一个接口

public interface Computer {
    void open();
}

创建其实现类

class Ddr implements Computer {
    @Override
    public void open() {
        System.out.println("启动内存");
    }
}
-------------------------------
class Cpu implements Computer {
    @Override
    public void open() {
        System.out.println("启动CPU");
    }
}
-------------------------------
class Ssd implements Computer {
    @Override
    public void open() {
        System.out.println("启动硬盘");
    }
}

创建Facade外观类

public class Facade {
    private Computer cpu;
    private Computer ddr;
    private Computer ssd;

    public Facade(){
    	cpu = new Cpu();
    	ddr = new Ddr();
    	ssd = new Ssd();
    }
	//客户端调用这个方法即可
	public void openComputer(){
		cpu.open();
		ddr.open();
		ssd.open();
		System.out.println("启动电脑");
	}
}

测试

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

总结

1.设计原则

外观模式体现了迪米特原则LOD,即类应该与其协作类进行交互但无需了解它们的内部结构。 ps:不符合开闭原则

2.优点

1、减少系统相互依赖,客户端与系统解耦
2、提高灵活性
3、安全

3.使用场景

1、为一个复杂的模块或子系统提供一个供外界访问的接口
2、子系统相对独立——外界对子系统的访问只要黑箱操作即可
3、预防低水平人员带来的风险扩散

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uranus^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值