摘要: 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的例子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。 用 阅读全文
posted @ 2018-07-25 10:41 Ericyshi 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 享元模式:运用共享技术有效地支持大量细粒度的对象。 一个网站共享代码的例子: 这例子基本实现了享元模式共享对象的目的。也就是说,不管建几个网站,只要是“产品展示”,都是一样的,只要是“博客”,也是完全相同的。在享元对象内部并且不会随环境改变而改变的共享部分,可以称为共享对象的内部状态。而随环境改变而 阅读全文
posted @ 2018-07-25 09:48 Ericyshi 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 自1945年成立了联合国之后,地球上就没有发生世界范围的战争,可以说联合国对世界和平的作用不可估量。它就是一个调停者、中介者角色,协调了各国之间的利益冲突与摩擦,解决或缓解了国际间经济、社会、文化和人道主义性质的问题。不同的对象与对象之间的关系,就如同国与国之间的关系错综复杂,有些情况下也需要一个“ 阅读全文
posted @ 2018-07-24 18:00 Ericyshi 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 工作中最喜欢的事情就是加薪了,但获得加薪可不容易,得经过层层审核。下面来代码模拟一下。 请求类 可以发现,管理者类中的getResult方法中有太多的分支判断,是非常不好的设计。如果要增加其他管理者,那就需要更改这个类,这个类承担了太多的责任,违背了单一职责原则和开放封闭原则。那如何重构呢? 职责链 阅读全文
posted @ 2018-07-24 17:11 Ericyshi 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 平时我们下馆子吃各种各样的美食时,总会发现我们都是通过服务员来点餐的,而不会直接告诉厨师我们想吃什么。这其中就包含一个设计模式--命令模式。 代码结构图: 命令模式: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式的作用: 阅读全文
posted @ 2018-07-24 16:34 Ericyshi 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 在面向对象设计中,有一个很重要的设计原则,那就是合成/聚合复用原则,即优先使用对象合成/聚合,而不是类继承。 合成和关联都是关联的特殊种类。聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了一种严格的部分与整体的关系,部分和整体的生命 阅读全文
posted @ 2018-07-24 11:13 Ericyshi 阅读(344) 评论(0) 推荐(1) 编辑
摘要: 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以定义一个全局变量使得一个对象被访问,但它不能阻止我们实例化多个对象,所以一个最好的办法就是让类自身保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且提供一个访问该实例的方法。 这里特别要注意singleton类的 阅读全文
posted @ 2018-07-23 17:54 Ericyshi 阅读(201) 评论(0) 推荐(1) 编辑
摘要: 迭代器模式:提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 当需要访问一个聚集对象,而不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式。 Iterator迭代器抽象类: Aggregate聚集抽象类: 迭代 阅读全文
posted @ 2018-07-23 11:40 Ericyshi 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式抽象代码: 何时使用组合模式? 当发现需求中体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模 阅读全文
posted @ 2018-07-23 11:12 Ericyshi 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 很多人都玩游戏,也知道游戏进度保存的重要性。一般我们在与boss决战之前就会保存自己角色的数据,万一被boss打得屁股尿流挂掉了,我们也可以从之前保存的进度重新开始。 我们来程序模拟一下游戏进度的保存。 第一版,简单的实现: 代码无错未必优。这段代码的问题主要在于客户端的调用,这样写就是等于把整个游 阅读全文
posted @ 2018-07-23 10:46 Ericyshi 阅读(184) 评论(0) 推荐(0) 编辑