您的位置:首页 > 其它

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

2017-03-02 18:04 288 查看
外观设计模式:Facade

作用:

为子系统中的一组接口提供一个一致的界面,外观提供的功能由多个子系统组合实现,客户端访问外观时并不知道功能的具体实现,从而实现子系统的隐蔽,同时外观提供的功能由子系统组合提供,方便子系统的功能升级

外观设计模式参与角色:

外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求任务分配给相应的子系统,外观负责整体功能流程的把控

子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务

抽象外观角色:AbstractFacade

public interface AbstractFacade {

/**
* 关闭机器
*/
public void closeMachine();

/**
* 打开机器
*/
public void openMachine();
}


具体外观类:

public class ConcreteFacade implements AbstractFacade {

private SubSystem02 subSystem01 = null;
private SubSystem01 subSystem02 = null;
private SubSystem03 subSystem03 = null;

public  ConcreteFacade() {
this.subSystem01 = new SubSystem02();
this.subSystem02 = new SubSystem01();
this.subSystem03 = new SubSystem03();
}

@Override
public void closeMachine() {

subSystem03.closeMachineInit(); //机器关闭的收尾工作:类似电脑关机时会自动保存文件等
subSystem02.closeMachine();  //机器断电
System.out.println("机器已正常关闭.............");
}

/**
* 机器开机需要检查机器的运行状态,正常之后才可进入正常的初始化作业
*/
@Override
public void openMachine() {
subSystem02.openMachine();  //机器通电
subSystem01.checkMachine();  //检查机器的运行状态:类似电脑的开机自检
subSystem03.openMachineInit(); //机器的初始化工作:类似电脑经过硬件自检后进入OS的初始化工作
System.out.println("机器初始化完毕.........");
}
}


子系统集合:

package com.zhiwei.facade;

/**
* 负责机器的通电和断电操作
* @author Yang ZhiWei
*
*/
public class SubSystem01 {

public void closeMachine(){
System.out.println("子系统01正在断电......");
}

public void openMachine(){
System.out.println("子系统01正在通电.......");
}
}


package com.zhiwei.facade;

/**
* 子系统1:负责检查机器的运行情况
* @author Yang ZhiWei
*
*/
public class SubSystem02 {

public void checkMachine(){
System.out.println("子系统02正在检查机器运行情况.......");
}
}


package com.zhiwei.facade;

/**
* 负责系统的初始化工作
* @author Yang ZhiWei
*
*/
public class SubSystem03 {

public void openMachineInit(){
System.out.println("子系统03正在执行机器打开的初始化作业.........");
}

public void closeMachineInit(){
System.out.println("子系统03正在执行机器关闭的作业.......");
}
}


测试代码:

AbstractFacade facade = new ConcreteFacade();
facade.openMachine(); //打开机器

System.out.println("--------------------------------");

facade.closeMachine();  //关闭机器


结果:



外观模式总结

对客户隐藏目标功能的具体实现,而是通过一个外观类提供访问目标功能的接口,内部通过组合子系统的部分功能去满足客户需求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息