设计模式之结构模式---外观模式

外观模式(Facade)
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。(摘自菜鸟教程)。这种模式代码实现起来很简单,我们就来举一个电脑启动和关闭的例子吧。我们在启动电脑的时候,只需要按一个按钮,但是电脑本身却是干了很多事情,例如它会启动CPU,启动内存,启动硬盘等。反映到代码中就是下面这样:
首先我们来声明CPU,内存,硬盘类:

package com.lc.clz.pattern.construct.facade;

/**
 * @author chenglezheng
 * @date 2020-01-22 10:10
 */
public class CPU {

    public void startCPU(){
        System.out.println("start CPU");
    }

    public void endCPU(){
        System.out.println("end CPU");
    }

}
package com.lc.clz.pattern.construct.facade;

/**
 * @author chenglezheng
 * @date 2020-01-22 10:15
 */
public class Disk {

    public void startDisk(){
        System.out.println("start Disk");
    }

    public void endDisk(){
        System.out.println("end Disk");
    }

}
package com.lc.clz.pattern.construct.facade;

/**
 * @author chenglezheng
 * @date 2020-01-22 10:13
 */
public class Memory {

    public void startMemory(){
        System.out.println("start Memory");
    }

    public void endMemory(){
        System.out.println("end Memory");
    }
}

接着我们来写电脑类了,

package com.lc.clz.pattern.construct.facade;

/**
 * @author chenglezheng
 * @date 2020-01-22 10:16
 */


public class Computer {

    CPU cpu=new CPU();
    Memory memory=new Memory();
    Disk disk=new Disk();

    /**
     * 开电脑
     */
    public void startComputer(){
        cpu.startCPU();
        memory.startMemory();
        disk.startDisk();
    }


    /**
     * 关电脑
     */
    public void endComputer(){
        cpu.endCPU();
        memory.endMemory();
        disk.endDisk();
    }



}

至此,外观模式就写完了,是不是很so easy。接着来测试下:

  /**
     * 外观模式测试
     */
    @Test
    public void FacadeTest(){
        Computer computer=new Computer();
        computer.startComputer();  //开电脑
        computer.endComputer();  //关电脑
    }

输出结果:
start CPU
start Memory
start Disk
end CPU
end Memory
end Disk

从结果可以看出,我们在启动电脑和关电脑的时候,是不是就很简单了,不需要那么复杂的步骤了,电脑本身都给我们解决了,我们只需要调用电脑类提供出来的一个方法就行。

总结:
优点:
1.避免了系统之间的相互依赖。
2.无论系统内部怎样运行,只要没有影响到外观对象,随你怎么high,因此提高了调用的灵活性。
3.想让你看到的东西,不想让你看到的东西,都可以通过外观对象自由控制,这样也因此提供了系统的安全性。
缺点
1.不符合设计模式的基本原则,修改起来需要维护已有的类。

使用场景
1.为一个复杂的模块或子系统提供对外访问的简单接口;
2.子系统相对整个系统比较独立,指向进行简单的黑箱操作即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值