这里用了一个电脑启动的例子,我们开机或者关机的时候,都不需要知道电脑执行了什么操作,我们只要按下电源键就可以了,而电脑自己会在他的内部找到CPU啊,硬盘啊,内存之类的这些硬件设备,然后进行开启或者关闭操作。
所以我们需要一个
CPU类,
内存类,
硬盘类,
而这些类实现硬件接口,
然后再设计一个电脑类,
因为要针对接口或抽象编程,所以我们可以设计多一个设备接口,电脑类去实现这个接口,
最后就是一个主类
下面是具体代码
CPU类:
package com.freshbin.pattern.facade.myexample.hardware;
/**
* CPU
*
* @author freshbin
* @date 2019-1-6 10:58:57
*/
public class CPU implements HardwareBase {
@Override
public void open() {
System.out.println("打开CPU!");
}
@Override
public void close() {
System.out.println("关闭CPU!");
}
}
内存类:
package com.freshbin.pattern.facade.myexample.hardware;
/**
* 内存
*
* @author freshbin
* @date 2019-1-6 10:58:57
*/
public class Memory implements HardwareBase {
@Override
public void open() {
System.out.println("打开内存!");
}
@Override
public void close() {
System.out.println("关闭内存!");
}
}
硬盘类:
package com.freshbin.pattern.facade.myexample.hardware;
/**
* 硬盘
*
* @author freshbin
* @date 2019-1-6 10:58:57
*/
public class HardDisk implements HardwareBase {
@Override
public void open() {
System.out.println("打开硬盘!");
}
@Override
public void close() {
System.out.println("关闭硬盘!");
}
}
硬件接口:
package com.freshbin.pattern.facade.myexample.hardware;
/**
* 硬件接口
*
* @author freshbin
* @date 2019-1-6 10:58:16
*/
public interface HardwareBase {
void open();
void close();
}
设备接口:
package com.freshbin.pattern.facade.myexample.device;
/**
* 设备
*
* @author freshbin
* @date 2019-1-6 11:01:54
*/
public interface DeviceBase {
void open();
void close();
}
电脑类:
package com.freshbin.pattern.facade.myexample.device;
import com.freshbin.pattern.facade.myexample.hardware.CPU;
import com.freshbin.pattern.facade.myexample.hardware.HardDisk;
import com.freshbin.pattern.facade.myexample.hardware.Memory;
/**
* 电脑
*
* @author freshbin
* @date 2019-1-6 11:02:37
*/
public class ComputerA implements DeviceBase {
private CPU cpu;
private Memory memory;
private HardDisk hardDisk;
public ComputerA() {
cpu = new CPU();
memory = new Memory();
hardDisk = new HardDisk();
}
@Override
public void open() {
cpu.open();
memory.open();
hardDisk.open();
System.out.println("电脑A已经开机完毕!");
}
@Override
public void close() {
hardDisk.close();
memory.close();
cpu.close();
System.out.println("电脑A已经关机完毕!");
}
}
客户端主类:
package com.freshbin.pattern.facade.myexample;
import com.freshbin.pattern.facade.myexample.device.ComputerA;
import com.freshbin.pattern.facade.myexample.device.DeviceBase;
/**
* 外观模式
*
* @author freshbin
* @date 2019-1-6 10:51:54
*/
public class FacadeMain {
public static void main(String[] args) {
DeviceBase deviceBase = new ComputerA();
deviceBase.open();
System.out.println("======================");
deviceBase.close();
}
}
然后是效果截图:
最后是github地址:https://github.com/freshbin/designPattern