一. 举例说明 还以我以前做的文件系统(FileSys)为例: 文件系统是一个独立的系统,它提供一套核心的文件操作. 除了文件系统,还有四个子系统,分别是杀毒子系统(KillVirus),压缩子系统(ZipFile),加密子系统(EncrypeFile)和刻录子系统(BurnCD),这四个子系统相互独立,但又可以做为主系统功能的一部分. 假设客户需要我这个文件系统有两种执行模式,一种是完全模式,一种是简单模式. 完全模式,要求杀毒子,压缩,加密和刻录功能都有. 简单模式,要求只要有杀毒,刻录就行…
Insus.NET在去年有写过一篇<软件研发公司,外观设计模式(Facade)>http://www.cnblogs.com/insus/archive/2013/02/27/2936061.html 例中写得过于简单与抽象.没有实质内容似的. 这次想再写一个.希望能再次加强.为子系统中的一组接口提供一个统一的高层接口,使客户使用子系统更容易 这是外观(Facade)模式的精髓. 在实现之前,可以先看看这篇<Web控件文本框Reset的功能>http://www.cnblogs.c…
设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习惯了而已.小明:...)对于这种现象,有请命令模式来做一下解说. 命令模式之自我介绍 知道高内聚么?不知道吧,其实我也不知道.(作者按:某模式开启装逼模式,装逼模式正在开启中...开启失败,回滚.)所以让作者大大给我们科普一下(苦命的我啊~),所谓高内聚是软件工程的一个概念,主要是面向对象的设计,说…
外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 在软件开发中,有时候为了完成一项较为复杂的功能,一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体出现,由于涉及到的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似电脑组装公司一样的角色,由它来负责和多个业务类进行交互,而客户类只需与该类交互.外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类充当了软件系统中的“电脑组装公司”,它为多个业务…
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式.门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行. 门面模式提供一个高层次的接口,使得子系统更易于使用. 门面模式结构图: 结构图说明: 门面(Facade)角色:客户端可以调用这个角色的方法.此角色知晓相关的(一个或者多个)子系统的功能和责任.在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去. 子系统(subsystem)角色:可以同时有一个或者多个子…
Facade模式可以为相互关联在一起的错综复杂的类整理出高层接口,可以让系统对外只有一个简单的接口,而且还会考虑到系统内部各个类之间的责任关系和依赖关系,按照正常的顺序调用各个类. 还是先看一下示例程序的类图. 接下来根据示例程序代码理解一下Facade模式. package bigjunoba.bjtu.facade; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties;…
目录 1. Facade模式简介 2. 示例程序 2.1 类图 2.2 程序 3.角色和类图 4.思路拓展 1. Facade模式简介 开发程序的过程中,随着时间的推移,类会越来越多,调用关系会越来越复杂,还会涉及到调用顺序的问题.此时我们就需要一个"窗口",把错综复杂的关联关系和调用顺序都写好,整理起来供使用者使用.这个模式最关键的思想就是:降低难度.并由此来提高开发效率,提升程序的可靠性和可维护性. 2. 示例程序 下面一段程序介绍如何生成一个网页:先从数据库里面读取用户信息,再按…
思考题 想想看,你在 JavaAPI 中遇到过哪些外观,你还希望 Java 能够新增哪些外观? P262 println.log 日志接口.JDBC 接口 突然让想感觉想不出来,各种 API 都用得挺顺的,没有太麻烦的使用 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用. P264 特点 提供简化的接口的同时,依然将系统完整的功能暴露出来 P260 将客户从组件的子系统中解耦 P260 意图是提供子系统的一个简化接口 P260 区别 P27…
一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上. 这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux. 其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费. 这时,无论出现新的系统…
一. 访问者模式 定义:表示一个作用于某对象结构中的各元素的操作.它你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 结构如下: 二. 举例 假设有一项科学实验,是用来对比两种种子在不同环境下的生长情况. 两种种子,一种是普通的种子(Seed_A),一种是太空运回的种子(Seed_B). 生长环境,分别是在多雨环境下(Rain_Status),阳光环境下(Sun_Status)等等. 结构如下: 代码如下: //状态 class Status { public: virtual ~S…