随笔分类 -  大话设计模式笔记

摘要:设计模式分类(23) 创建型模式(5) "抽象工厂(Abstract Factory)" "建造者(Builder)" "工厂方法(Factory Method)" "原型(Prototype)" "单例(Singleton)" 结构型模式(7) "适配器(Adapter)" "桥接(Bridge) 阅读全文
posted @ 2019-12-22 15:39 callmeDevil 阅读(313) 评论(0) 推荐(0)
摘要:访问者模式 定义 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 UML图 特点 访问者模式适用于数据结构相对稳定的系统,它把数据和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化 访问者模式的目的是要把处理从数据结构分离 阅读全文
posted @ 2019-12-22 14:43 callmeDevil 阅读(434) 评论(0) 推荐(0)
摘要:解释器模式 定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 目的 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 UML图 好 阅读全文
posted @ 2019-12-15 17:06 callmeDevil 阅读(440) 评论(0) 推荐(0)
摘要:享元模式 定义 运用共享技术有效的支持大量细粒度的对象。 UML图 举个栗子 实际开发当中,一个项目如果做得好,如果市场打通到其他地方,那么核心代码其实是可以通用的,只不过用着不同的数据和特性出来的模版而已,这些对用户来说是非透明的。使用最小的开销获得最大的收益,这是所有公司的目的。 Talk is 阅读全文
posted @ 2019-12-15 15:56 callmeDevil 阅读(380) 评论(0) 推荐(0)
摘要:中介者模式 定义 用一个中介对象来封装一系列的对象交互。中介使各对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 UML图 举个栗子 “联合国”就是世界上各个国家的一个“中介”,许多事情都不是国家之间直接交互,而是通过“安理会”等组织进行协商、投票等过程。 Talk 阅读全文
posted @ 2019-12-15 12:02 callmeDevil 阅读(404) 评论(0) 推荐(0)
摘要:职责链模式 定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 UML图 好处 当客户提交一个请求时,请求是沿链传递直至有一个 ConcreteHandler 对象负责处理它 接收者和发送者都没有对方 阅读全文
posted @ 2019-12-14 17:59 callmeDevil 阅读(398) 评论(0) 推荐(0)
摘要:举个栗子 路边摊吃烧烤,老板只有一人,又要记住点单,又要忙着收费,客户做什么都要排队。。。 反例思路1 如果客户多了,请求多,就容易混乱,他叫五串羊肉串,你叫三个烤鸡翅,老板哪里忙得过来。代码中的体现就是一句一句输出,所以应该要有个服务员。。。 门面改造 Talk is cheap, show me 阅读全文
posted @ 2019-12-14 17:01 callmeDevil 阅读(389) 评论(0) 推荐(0)
摘要:举个栗子 在M和N两种品牌的手机里面各做通讯录和游戏两种软件。前提:M和N手机之间不通用。 反例思路1 以手机品牌为主体,各自实现软件。 反例思路2 以手机软件为主体,各自适配品牌。 弊端说明 对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。 子类的实现与它的父类有非常紧密 阅读全文
posted @ 2019-12-14 16:01 callmeDevil 阅读(351) 评论(0) 推荐(0)
摘要:单例模式 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以创建,并且它可以提供一个访问该实例的方法。 UML图 方式一:单线程下的 阅读全文
posted @ 2019-08-17 16:03 callmeDevil 阅读(440) 评论(0) 推荐(0)
摘要:迭代器模式 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 什么时候用? 当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式 。 你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。 UML图 模板代码 Aggregate It 阅读全文
posted @ 2019-08-17 14:46 callmeDevil 阅读(464) 评论(0) 推荐(0)
摘要:组合模式 定义 将对象组合成树形结构以表示“部分 整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 UML图 模板代码 Component Composite HRDepartment FinanceDepartment 测试 测试结果 总结 组合模式定义了包含基本对象、组合 阅读全文
posted @ 2019-08-11 17:09 callmeDevil 阅读(448) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 打游戏存进度。 简单实现 GameRole 测试 测试结果 存在问题 在客户端调用这段,把整个游戏角色的细节暴露了,职责太大,需要知道游戏角色的生命力、攻击力、防御力这些细节,还要进行备份。如果以后需要增加“魔法力”或修改现有的某种力,那这部分代码就需要修改,同样恢复时也是一样的 阅读全文
posted @ 2019-08-11 15:46 callmeDevil 阅读(397) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 不同国家的人在NBA打球,但都是用英文交流。 简单实现 Player Forwards Center Guards 测试 测试结果 存在问题 姚明刚到NBA时可能英文还不太好,也就是说听不懂教练的战术安排,attach 和 defense 不知道什么意思,因此这样实现会有问题,需 阅读全文
posted @ 2019-08-04 16:37 callmeDevil 阅读(392) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 上班的日子,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬。根据时间的不同体现不同的工作状态。 简单实现 Work / 抽象状态 Created by callmeDevil on 2019/8/3. / public abstract class State { public 阅读全文
posted @ 2019-08-03 15:56 callmeDevil 阅读(392) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 模拟访问数据库“新增用户”和“得到用户”,用户类假设只有 ID和Name 两个字段。 简单实现 User SqlServerUser 测试 测试结果 存在问题 如果需要连接别的数据库,那么这个写法无法扩展,下面使用 工厂方法模式 实现 工厂方法模式实现 IUser SqlServ 阅读全文
posted @ 2019-07-28 17:13 callmeDevil 阅读(532) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 几个同事上班期间看股市行情,让前台MM帮忙看着老板什么时候过来查岗,老板进门的时候MM就拨电话给其中一个同事,于是所有同事都知道了,再继续工作。。。 简单实现 前台秘书MM 看股票同事 测试 测试结果 存在问题 “前台MM”和“看股票同事”互相耦合 如果还有人想看NBA直播,那只 阅读全文
posted @ 2019-07-27 16:26 callmeDevil 阅读(408) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 画一个小人,有头、身体、两手、两脚就可以了。 简单实现 人类 测试 测试结果 存在问题 画人的时候,头身手脚是必不可少的,不管什么人物,开发时是不能少的。但上面测试代码中时各部分堆积起来,很容易漏写,比如导致健全的人物却少了一条“腿”。而且如果需要在别的地方用这些画小人的程序怎么 阅读全文
posted @ 2019-07-21 14:28 callmeDevil 阅读(472) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 股民炒股票 简单实现 股票1 其他股票 测试 测试结果 外观模式 定义 为了子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这个子系统更加容易使用。 UML图 代码实现 基金类(Facade) 测试 测试结果同上,此处省略。 总结 首先,在设计初期阶 阅读全文
posted @ 2019-07-20 14:33 callmeDevil 阅读(373) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 小时候数学老师的随堂测验,都是在黑板上抄题目,然后再作答案。写一个抄题目的程序。 简单实现 学生甲抄的试卷 学生乙抄的试卷 测试 测试结果 存在问题 两个学生抄试卷都非常类似,除了答案不同,没什么不一样,这样又容易错,又难以维护。因此老师出一份试卷,打印多份,让学生填写答案就可以 阅读全文
posted @ 2019-07-14 15:01 callmeDevil 阅读(413) 评论(0) 推荐(0)
摘要:举个栗子 问题描述 要求有一个简历类,必须要有姓名,可以设置性别和年龄,可以设置工作经历,最终需要三份简历。 简单实现 简历类 测试 测试结果 存在的问题 跟手写简历没有差别,三份简历需要三份实例化,如果客户需要二十份简历,那就得实例化二十次。 原型模式 定义 用原型实例指定创建对象的种类,并且通过 阅读全文
posted @ 2019-07-13 14:08 callmeDevil 阅读(523) 评论(0) 推荐(0)