类关系设计模式小结

前面简单的学习了策略模式、观察者模式、装饰者模式,三种模式主要用于处理类之间的关系,三种模式循序渐进,后面的模式可以说是对前一模式的完善

策略    模式:一对一的类关系,模式中存在一个核心和多个算法,但是核心只能从这多个算法中选择一个进行使用,也算是一个缺点,从而引入观察者模式

观察者模式:一对多的类关系,模式中存在一个主题和多个观察者,此时主题可以持有多个观察个,并使用其方法。但也可以发现,观察者的复用性较低,基本上绑定了主题。

装饰者模式:多对多的关系,模式中可以存在多个装饰者和多个组件,同时组件也可能是一个装饰者,一个装饰者可以装饰多个组件,一个组件也可以拥有多个装饰者。

每种模式都有其局限性,即适用于处理一定范围内的问题,没有通用的模式,只有解决问题的模式。

简单整理一下三种模式适用的【问题域】

策略模式:

1.多个类只表现为行为不同,其他结构体基本相同,如工资结算,类结构区别多在计算方法中不同。

2.需要在不同情况下使用不同算法,或者在可预期内,算法实现方式会发生变化。

3.隐藏具体实现细节(将核心技术保留在自己手中)。

观察者模式

1.抽象个体有两个相互依赖的层面,封装这些对象,使之可以随意修改同时不会影响依赖关系之间的交互

2.一个对象的变化会影响其他对象,但是又不知道被影响对象的数量

3.对象有能力通知其他对象,但又不知道具体实现细节

装饰者模式

1.需要扩展一个类的功能,或者给一个类附加一个职责

2.动态的扩展类的功能

3.需要实现大量由基本功能排列组合而成的功能

4.不能使用继承的方式进行扩充时,一种情况是,可能有大量的独立扩展,使得子类数目过多;另一种情况,类定义被隐藏或不能用于生产子类

时间: 2024-10-14 12:45:42

类关系设计模式小结的相关文章

设计模式基础:类及类关系的UML表示

设计模式基础:类及类关系的UML表示 2009-10-26 17:00 by 宗哥, 1891 阅读, 1 评论, 收藏, 编辑 UML中,类关系分为这几种,泛化(generalization), 实现(realization),依赖(Dependency),关联(associate),聚合(aggregation),(composition)下面分别是UML实现及C#中的代码表现. 泛化(generalization) 泛化也称作特化(specialization),用来表示一个更一般和更特殊

设计模式小结——六大设计原则

设计模式是一套由软件界前辈们总结出的可以反复使用的编程经验,旨在提高代码的可重用性,提高系统的可维护性,以及解决一系列复杂问题.设计模式包括6大设计原则和23种种设计模式.6大设计原则:单一职责原则SRP 应该有却仅有一个原因引起类的变更,即类最好只实现一种功能.高内聚. 单一职责的实现方式是一个职责一个接口. 单一职责适用于类和接口,同样适用于方法,一个方法也应该只做好一件事.里氏替换原则LSP 所有能使用父类的地方必须能透明地使用其子类的对象. 子类必须完全实现父类的方法,如果子类不能完整实

UML类关系

一.依赖关系(Dependence) 依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类. 依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系.大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数. 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方. 1 public class Driver 2 { 3 public void d

使用maintainJ快速了解项目类关系

MaintainJ能够在很短的时间内进行debug(找出缺陷).能够方便的了解项目已有特性从而容易进行功能增强(enhance).能够展现调用耗时从而能够快速定位瓶颈调整系统提升系统性能.此外利用它还能快速的建立与实际调用一致的UML 类关系视图和调用时序视图,这也是形成文档的关键资料.而这些工作的快速完成均是由于MaintainJ是一款基于AOP实现的能够在操作具体用例(Use case)过程中时时形成调用关系.类关系以及传递的参数和响应时间等等的原因.MaintainJ能够对java web

一种JavaScript 类的设计模式

一种JavaScript 类的设计模式尽管前面介绍了如何定义一个类,如何初始化一个类的实例,但既可以在function定义的函数体中添加成员,又可以用prototype 定义类的成员,代码显的很混乱,和面向对象语言类的实现之间有着很大的区别.那么,如何以一种清晰的方式来定义类呢?下面给出了一种类的实现模式,并将它们对应到面向对象语言类的实现上.类的构造函数用来初始化一个实例,是每个类必不可少的一部分.在传统意义的面向对象中,类的构造函数的名称和类的名称一致,同时它们的定义方式和类成员的定义是类似

C++ 类知识部分小结

参见我的思维导图: 我的思维导图 pdf 版本:http://vdisk.weibo.com/s/awe79734YmL3I C++ 类知识部分小结

【JAVA 动态创建风水罗盘 超精华Swing项目方案-类关系图 - 文章02】

动态创建风水罗盘系统 UI Swing UI关系类图 动态创建风水罗盘系统 罗经层绘制工厂 动态创建风水罗盘系统 罗经具体实现绘制工厂实现类关系 动态创建风水罗盘系统 定制盘面绘制数据模型 动态创建风水罗盘系统 装饰器模式绘制整体盘面关系 未完继续-.

核心动画类关系图

核心动画是基于CALayer的操作,在后台操作不阻塞主线程 以下是核心动画的类关系图

Android相关类关系

Activity Window.WindowManager View. interface----ViewManager LayoutInflater Components Activity.Services.ContentProvider.Broadcast Receiver Activity-------Activity主要负责生命周期的管理,建立窗口. Window---------------------->getWindow | View.ViewGroup | LayoutInfla