问题: 有特殊考虑(例如存在复杂建立逻辑、为了改良内聚而 分 离建立职责等)时,应该由谁来负责建立对象?前端
建立称为工厂的纯虚构对象来处理这些建立职责算法
一般用单实例类来访问工厂模式设计模式
问题: 对象须要全局可见性和单点访问(访问的都是同一个对象)api
对类定义静态方法以返回单实例markdown
例如工厂类中定义一个静态方法,返回本身的惟一实例,那么其余类能够方便地经过调用这个方法得到工厂对象的引用学习
通常使用缓式初始化即调用获取某个对象的方法时才建立这个对象,而预初始化是在调用前就已经建立了这个对象(静态成员),预先建立可能会占用资源,而且有的对象的建立逻辑复杂flex
问题: 何设计变化但相关的算法或政策?如何设计才能使这些算法或政策具备可变动的能力?设计
在单独的类中分别定义每种算法/策略,并使其拥有共同的接口3d
策略是基于多态的,对变化的算法/政策提供了防止变异,一般由工厂建立server
问题: 何可以像处理非组合(原子)对象同样,处理一组对象 或 具备组合结构的对象呢?
定义组合和原子对象的类,使他们实现共同的接口
基于多态提供防止变异
问题: 对一组彻底不一样的实现或接口,须要公共、统一的接口。可能会与子系统内部的大量事物产生耦合,或者子系统的实现可能会改变。
对于子系统定义的惟一接触点——使用外观对象封装子系统。该外观对象提供惟一和统一的接口,并负责与子系统构件进行协助。
外观是“前端”对象,是子系统服务的惟一入口;子系统的实现和其余构件是私有的,并不对外部构件可见。外观对子系统实现的变化提供防止变异。
书上讲的不清不楚的,但我感受这个其实像api
问题: 同类型的订阅者对象关注于发布者对象的状态变化或事件,而且想要在发布者产生事件时以本身独特的方式做出反应。此外,发布者想要保持与订阅者的低耦合。如何对此进行设计呢?
定义“订阅者”或“监听器”接口,订阅者实现此接口。发布者能够动态注册关注某事件的订阅者,并在事件发生时通知他们。
View对象和Model对象都有可能变化,但它们不直接耦合,只要接口不变彼此的改变就不容易影响到对方;其实像MVVM的思想,视图UI与业务逻辑分开,只有数据绑定在一块儿,极大下降了耦合性
上面都看书,很简单
当两个或多个独立用例中存在重复,想避免冗余时,能够将重复的部分分解出去为一个子功能用例(或者不想原用例过于复杂分解一部分出去),使用包含关系包含重复的部分
拓展部分过于复杂或者原始用例的拓展部分不便于添加,能够将要拓展的内容做为子功能级别的拓展用例
概念子类集合的全部成员都是其超类集合的成员,子类 is-a 超类 ( 注意不是类,是领域模型里面的概念类 )
子类的属性和关联必须100%与超类一致
若是类C的每一个成员也必须是子类的成员,则C被称为抽象概念类(有点像抽象类的实例只能是其非抽象的子类同样,也就是说这个类不能实例化)
后面的章节都是一些拓展和实战,不太算重点我也没什么笔记就不放了
参考文献 (美)Carig Larman著. UML模式和应用(原书第三版)[M]. 李洋等译. 机械工业出版社, 2006-05 单纯是我的的学习/复习笔记,对课本知识点的总结概括,本身也是用markdown作的笔记就顺手发上来