? 外观模式也称门面模式,外观模式定义了一个高层接口,该接口为子系统中的一组接口提供一个统一的接口,从而简化了子系统的使用。同时隐藏了子系统内部的复杂性,并向客户端提供了一个更简单的接口,使得子系统变得更加容易。
? 当我们想看电视时,在电视上或者电视遥控器上都有一个电源启动 / 关闭按钮,这个按钮掩盖了电视机内部的所有复杂性,当我们想看电视时按下遥控器上的电源启动按钮,或者想调整电视音量时,又或者想调换电视节目等,也是通过电视遥控器上的某一个按钮来控制电视机,完成对应的电视复杂操作。
package com.technologystatck.designpattern.mode.appearance;
public class Appearance {
public static void main(String[] args) {
//创建外观对象
Facade facade = new Facade();
//客户端通过外观类调用子系统的操作
facade.facadeOperation();
}
}
//子系统A
class SubsystemA{
public void operationA(){
System.out.println("SubsystemA operation");
}
}
//子系统B
class SubsystemB{
public void operationB(){
System.out.println("SubsystemB operation");
}
}
//子系统C
class SubsystemC{
public void operationC(){
System.out.println("SubsystemC operation");
}
}
//外观类
class Facade{
private SubsystemA subsystemA;
private SubsystemB subsystemB;
private SubsystemC subsystemC;
//实例化三个子系统
public Facade() {
this.subsystemA = new SubsystemA();
this.subsystemB = new SubsystemB();
this.subsystemC = new SubsystemC();
}
//外观方法,封装了对子系统的操作
public void facadeOperation(){
subsystemA.operationA();
subsystemB.operationB();
subsystemC.operationC();
}
}
小明家的电源总开关控制了家里的三个设备:空调、台灯和电视机。每个设备都有独立的开关密码,分别用数字1、2和3表示。即输入1时,空调关闭,输入2时,台灯关闭,输入3时,电视机关闭,当输入为4时,表示要关闭所有设备。请你使用外观模式编写程序来描述电源总开关的操作。
第一行是一个整数 N(1 <= N <= 100),表示后面有 N 行输入。
接下来的 N 行,每行包含一个数字,表示对应设备的开关操作(1表示关闭空调,2表示关闭台灯,3表示关闭电视机,4表示关闭所有设备)。
输出关闭所有设备后的状态,当输入的数字不在1-4范围内时,输出Invalid device code.
package com.technologystatck.designpattern.mode.appearance;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int nums = scanner.nextInt();
// scanner.nextLine();
//创建外观类对象,也就是电源开关
// PowerFacade powerFacade =null;
// for(int i=0;i<nums;i++){
// int systemType = scanner.nextInt();
// powerFacade= new PowerFacade();
// powerFacade.facadeOperation(systemType);
// }
//定义数组存放用户输入
int[] inputs=new int[nums];
for(int i=0;i<nums;i++){
inputs[i]=scanner.nextInt();
}
//创建外观类对象,也就是电源开关
PowerFacade powerFacades=new PowerFacade();
for(int j=0;j<nums;j++){
powerFacades.facadeOperation(inputs[j]);
}
}
}
//创建三个子系统
//电视机子系统
class Television{
public void operationTV(){
System.out.println("Television is turned off.");
}
}
//空调子系统
class AirConditioner{
public void operationAC(){
System.out.println("Air Conditioner is turned off.");
}
}
//台灯子系统
class TableLamp{
public void operationTL(){
System.out.println("Table Lamp is turned off.");
}
}
//创建外观类,来操控三个子系统
class PowerFacade{
private Television television;
private AirConditioner airConditioner;
private TableLamp tableLamp;
//实例化三个子系统
public PowerFacade(){
this.television=new Television();
this.airConditioner=new AirConditioner();
this.tableLamp=new TableLamp();
}
//外观方法,封装了对子系统的操作
public void facadeOperation(int type){
if(type==1){
television.operationTV();
}else if (type ==2 ) {
this.airConditioner.operationAC();
}else if(type==3){
tableLamp.operationTL();
}else if(type==4){
System.out.println("All devices are off.");
}else{
System.out.println("Invalid device code.");
}
}
}