设计模式(十九):访问者模式
摘要:优点: ① 可以在不改变各元素的类的前提下,定义作用于这些元素的新操作新状态,将元素和作用于元素之上的操作之间的耦合解脱开,使得操作可以相对集中和自由变化增减。 ② 对于元素操作或状态,具有良好的灵活性和扩展性。 缺点: ① 增加新的对象结构(即对象元素)Element很困难,需要改动多。 适用范围
阅读全文
posted @
2019-01-23 10:42
书生游
阅读(135)
推荐(0)
设计模式(十八):中介者模式
摘要:优点: ① 将系统的网状结构,变成以中介者为中心的星形结构,各对象之间不直接发生联系,耦合松散 ② 用一个中介对象来封装一系列的对象交互。中介者模式使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 ③ 提高系统的灵活性,使得各个对象独立且易于复用。 缺点: ① 中介
阅读全文
posted @
2019-01-22 10:04
书生游
阅读(135)
推荐(0)
设计模式(十七):解释器模式
摘要:优点: ① 如果一个特定问题发生频率够高,就值得将其实例表述(解释为)为一个简单语言的句子,如用正则表达式匹配手机号,油箱等 ② 必须已有一种语言,之后,先定义其文法表示,然后定义其解释器,用解释器来解释此语言中的句子 缺点: ① 此模式为文法中的每一条规则至少定义了一个类,因此包含了许多规则的文法
阅读全文
posted @
2019-01-21 14:53
书生游
阅读(148)
推荐(0)
行为型模式(一)
摘要:观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所依赖于它的对象都将得到通知并自动更新。 具体对象之间,相互知道的越少越好,这样发生改变时才不至于相互影响。 目标和观察者之间不是紧密耦合的,它们可以属于一个系统中的不同抽象层次,目标知道的仅仅是它有一些列的观察者,每个观察者
阅读全文
posted @
2019-01-17 09:29
书生游
阅读(213)
推荐(0)
设计模式(十六):职责链模式
摘要:优点: ① 职责链可简化对象的相互连接,仅需要保持一个指向上级的路线 ② 分派职责时,有更多的灵活性,可以通过在运行时刻对该链进行动态的增加或修改,来增加或改变那些处理请求的那些职责。 缺点: ① 不能保证请求一定被接收。既然一个请求没有明确的接收者,那么就不能保证它一定会被处理,该请求可能一直到链
阅读全文
posted @
2019-01-10 12:00
书生游
阅读(149)
推荐(0)
设计模式(十五):状态模式
摘要:优点: ① 将与特定状态相关的行为局部化,并且将不同状态的行为分割开。 缺点: ① 可能出现大量状态类。 适用范围: 当一个对象的行为取决于他的状态,而且他必须在运行时刻根据状态改变他的行为,就要考虑此模式。 一个操作中含有庞大的分支机构,并且这些分支决定于对象的状态。 客户端: Work work
阅读全文
posted @
2019-01-10 10:43
书生游
阅读(148)
推荐(0)
设计模式(十四):命令模式
摘要:优点: ① 可降低 请求发送者与请求接收者之间的耦合 ② 新增和删除Command对象变得容易,方便被操纵和扩展。 缺点: ① 可能导致某些系统有过多的具体命令类,影响该模式效率。 适用范围: 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。 客户端: Chef chef = n
阅读全文
posted @
2019-01-10 10:11
书生游
阅读(122)
推荐(0)
设计模式(十三):模板模式
摘要:优点: ① 定义了一个算法骨架或行为族,而将一些步骤延迟到子类中,可以把公共的代码移到父类里面,从而避免代码重复。 ② 具体细节步骤实现定义在子类中,使得子类可以不改变一个算法的整体结构即可以重新定义该算法的某些特定步骤。 缺点: ① 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。 ② 由
阅读全文
posted @
2019-01-09 11:30
书生游
阅读(106)
推荐(0)
设计模式(十二):观察者模式
摘要:优点: 观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。 缺点: ① 如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,
阅读全文
posted @
2019-01-09 10:48
书生游
阅读(192)
推荐(0)
设计模式:结构型模式
摘要:外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一系统更加容易使用。 适配器模式:将一个类的接口转换成客户希望的另外一个接口。它使得原本由于接口不兼容而不能一起工作的那些类一起工作。 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化。 组合模式
阅读全文
posted @
2019-01-08 14:22
书生游
阅读(143)
推荐(0)
设计模式(十一):代理模式
摘要:优点: ① 将代理对象和真实被调用的目标对象分离,降低了耦合度,提高了扩展性。 ② 保护和增强目标对象。 缺点: ① 增加了代理类,请求速度变慢,增加系统复杂性。 适用范围: ① 安全代理,用来控制真实对象的访问权限。 ② 智能代理,调用真实对象时,代理处理另外一些事。 ③ 虚拟代理,根据需要创建开
阅读全文
posted @
2019-01-08 14:12
书生游
阅读(134)
推荐(0)
设计模式(十):享元模式
摘要:优点: 减少了系统中对象的数量,避免了大量细粒度对象给内存带来的压力,实现对细粒度对象的复用。 缺点: 此模式需要维护一个记录了系统已有的所有享元对象的列表,本身就需要耗费资源。此外此模式需要将一些状态外部化,也使得系统及逻辑更加复杂。 适用范围: 一个系统中有大量的对象,同时这些对象耗费大量的内存
阅读全文
posted @
2019-01-08 10:01
书生游
阅读(132)
推荐(0)
设计模式(九):装饰者模式
摘要:优点: ① 可以提供比继承更多的灵活性,原有代码无须变动,只是在原对象上装饰一层“外衣”。 ② 可以动态扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。 缺点: ① 会产生很多的小对象,增加了系统的复杂性 ② 比继承更加灵活,同时意味着比继承更易出错,排错也困难,对于多次装饰的对象
阅读全文
posted @
2019-01-07 16:34
书生游
阅读(122)
推荐(0)
设计模式(八):组合模式
摘要:优点: ① 都实现了Component接口,都具备了Add和Remove方法,使用户对单个对象(叶子)和组合对象(枝干)的调用没有区别。 ② 扩展节点非常容易,便于后期扩展维护。 缺点: 使得设计更加复杂,客户端需要花更多时间理清类之间的层次关系。 适用范围: 只要是树形结构,只要是要体现局部和整体
阅读全文
posted @
2019-01-07 10:33
书生游
阅读(194)
推荐(0)
设计模式(七):桥接模式
摘要:优点: ① 分离抽象接口及其实现部分。提高了比继承更好的解决方案。 ② 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。 缺点: ① 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。 ② 桥接模式要求正确
阅读全文
posted @
2019-01-04 17:48
书生游
阅读(164)
推荐(0)
设计模式(六):适配器模式
摘要:优点: ① 通过引入一个适配器Adapter来重用现有的不兼容的旧类Adeptee,而无需修改旧类原有结构。 ② 增加了旧类的复用性;适配器的灵活性和扩展性都非常好 缺点: ① 一次最多只能适配一个旧类,不能同时适配多个旧类。 适用范围:需要有旧类,而旧类的接口不符合新系统的需要,甚至旧类都没有源代
阅读全文
posted @
2019-01-04 16:47
书生游
阅读(129)
推荐(0)
设计模式(一)工厂模式(补) -- 理解记忆方式
摘要:设计,是为了更好的应对变化。 思考记忆方向:此模式是不是 提取了抽象、分离了具体、依赖于抽象、封装了具体
阅读全文
posted @
2019-01-02 18:02
书生游
阅读(222)
推荐(0)
设计模式(五):外观模式
摘要:说明:Facade外观类 SubSystem子系统 优点: ①对子系统的使用变得简单了,减少了客户与子系统的联系和子系统之间的耦合。 ②降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程。 缺点:新增子系统需要修改外观类,除非设置抽象外观类接口。 比较:外观模式的意图是简化接口,
阅读全文
posted @
2018-10-19 09:51
书生游
阅读(126)
推荐(0)
设计模式:创建型模式
摘要:工厂方法:一个抽象工厂接口,多个具体工厂来实现,再由每个工厂生产各自的具体产品,即调用具体工厂生产具体产品(创建一个对象)。 抽象工厂:调用统一的对外抽象接口,来创建一组相关或相互依赖的对象(同时创建多个对象)。 单例模式:一个类仅有一个实例,并提供一个访问它的全局访问点。 建造者模式:将一个复杂对
阅读全文
posted @
2018-10-17 17:41
书生游
阅读(156)
推荐(0)
设计模式(四):原型模式
摘要:原型模式 UML类图: 说明: 在Java中不需要ProtoType接口,Java自带克隆接口:Cloneable,只需ConcreteProtoType直接实现Cloneable接口,之后重写 clone()方法即可。 优点: ①隐藏了新对象创建的细节,大大提高了性能,逃避了构造函数的约束。 ②在
阅读全文
posted @
2018-10-17 17:21
书生游
阅读(159)
推荐(0)