文档章节

【结构型】- 外观模式

ZeroneLove
 ZeroneLove
发布于 02/19 22:24
字数 657
阅读 8
收藏 0

外观设计模式:Facade


作用:为子系统一组接口提供一个统一的界面,外观提供的功能由多个子系统组合实现,子系统功能实现对客户是透明的,同时外观提供的功能由子系统组合提供,方便子系统的功能升级

角色


  • 外观类(Facade):外观类准确将客户请求任务分配给对应子系统,外观负责整体功能流程控制

  • 子系统类集合(SubSystem Classes):实现具体的功能,接受外观请求


抽象外观角色:AbstractFacade

public interface AbstractFacade {

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

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

具体外观类:

public class ConcreteFacade implements AbstractFacade {

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

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

        //机器关闭收尾工作,类似商店关门需收拾东西
        subSystem03.closeMachineInit(); 
        subSystem01.closeMachine();  //机器断电
        System.out.println("机器已正常关闭.............");
    }

    /**
    * 机器开机需要检查机器的运行状态,正常之后才可进入正常的初始化作业
    */
    @Override
    public void openMachine() {

        //机器通电
        subSystem01.openMachine();  

        //检查机器的运行状态:类似电脑开机自检
        subSystem02.checkMachine();  

        //机器的初始化工作:类似电脑经过硬件自检后进入OS的初始化工作
        subSystem03.openMachineInit();

        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;

/**
 * 负责检查机器的运行情况
 * @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();  //关闭机器

外观模式分析

以客户端需求为导向,但功能实现对客户端透明,而是通过一个外观类提供服务,由内部通过组合子系统的部分功能实现具体服务

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 162
码字总数 128572
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式-外观模式

外观模式是一种使用频率非常高的结构型设计模式, 它通过引入一个外观角色来简化客户端和子系统之间的交互, 为复杂的子系统提供统一的入口, 降低子系统与客户端的耦合度, 且客户端调用非常方便...

hell03W
2016/11/10
28
0
Android的设计模式-外观模式

前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: Android的设计模式-设计模式的六大原则 一句话总结23种设计模式则 创建型模式: Android的设计模式-单例模式 Android的设计模式...

四月葡萄
2018/01/04
0
0
(十一)外观模式详解(Service第三者插足,让action与dao分手) .

各位好,LZ今天给各位分享一个不太熟悉的面孔,但却是我们最经常使用的设计模式,外观模式。 定义:外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层...

Sheamus
2015/02/06
0
0
一天一种设计模式之十一-----外观模式

一.外观模式简介 外观模式属于结构型模式。 外观模式为子系统中的一组接口提供了一个一致的界面,外观模式定义了一个高层接口,这个接口使得子系统更加容易使用。 当你要为一个复杂的系统提供...

tongqu
2016/03/19
106
1

没有更多内容

加载失败,请刷新页面

加载更多

最开始学习素描的步骤是什么?

最开始学习素描的步骤是什么?很多学画画的朋友们都会问直接跳过素描不学素描行不行,小编非常的肯定告诉你不行,素描是所以绘画类的基础,台阶是一层一层筑起的,目前的现实是未来理想的基础...

设绘嗨
28分钟前
1
0
Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray

code val linkPairSum = F.udf( (list:List[Map[Long,Int]]) => { var map = Map[Long,Int]() for(m <- list){ if(m != null){ ......

张欢19933
28分钟前
1
0
git常见问题

一、clone代码 clone 1.登录账号密码不对 fatal: Authentication failed for 2.权限不足 Permission denied (publickey) 或者emote: User permission denied fatal: unable to access u......

hexiaoming123
38分钟前
1
0
Mybatis操作mysql 8的Json字段类型

Json字段是从mysql 5.7起加进来的全新的字段类型,现在我们看看在什么情况下使用该字段类型,以及用mybatis如何操作该字段类型 一般来说,在不知道字段的具体数量的时候,使用该字段是非常合...

算法之名
46分钟前
38
0
Windows7至Windows10的升级建议

目前,诸多企业或已开始在进行Windows7至Windows10的升级,或正在规划Windows7升级至Windows10。 主要原因有两个: Windows7的生命周期即将结束,这意味着再也无法获取Windows7的安全更新,以...

嘉为科技
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部