Java基础知识——UML,创建模式,结构模式,行为模式

UML关系:
参考资料
注意:箭头指向为被
泛化:类的继承
Java基础知识——UML,创建模式,结构模式,行为模式
实现:类实现接口
Java基础知识——UML,创建模式,结构模式,行为模式
依赖:表现为局部变量、方法的参数或者对静态方法的调用。Java基础知识——UML,创建模式,结构模式,行为模式
关联:表现为成员变量,地位平等(学生和老师)。可以单向也可以双向仅仅是知道或者不知道的意思
Java基础知识——UML,创建模式,结构模式,行为模式

Java基础知识——UML,创建模式,结构模式,行为模式
聚合:表现为成员变量,地位为包含关系整体和部分(工厂和工人)

Java基础知识——UML,创建模式,结构模式,行为模式
Java基础知识——UML,创建模式,结构模式,行为模式

组合:表现为成员变量,地位为强拥有(人和心脏)

Java基础知识——UML,创建模式,结构模式,行为模式
它们表现的依赖关系强弱程度不同,这4种关系所表现的强弱程度依次为:组合(Composite) > 聚合(Aggregation) > 关联(Association) > 依赖(Dependency)。
关联关系:每个对象都有自己的生命周期,对象之间不存在从属关系
聚合关系:整体和部分是可以分离的,整体和部分都可以拥有各自的生命周期
组合关系:整体和部分是不可以分离的,整体的生命周期结束时,也意味着部分的生命周期结束。

设计模式
参考资料
创建模式:普通工厂,抽象工厂,单例,建造者,原型
结构模式:适配器,装饰,代理,门面,桥接,享元,组合
行为模式:
传递消息:中介者 观察者 命令
方法解耦:策略 模版方法 状态 访问者
备份:备忘录
遍历:迭代器 责任链

建造者模式:创建复合对象(如queue),并且关注复合对象的组合顺序
Director类:起到封装作用,调用Builder的方法
Builder类:抽象类
ConcreteBuilder:抽象类的实现,拥有很多子方法
此时,我们只需要修改Director,就可以得到 按不同顺序调用Builder方法得到的组合对象。

参考资料

原型模式:利用clone产生新对象的模式

结构型模式

适配器模式
类的适配器模式:想获得一个实现接口A的类B,为了不破坏封装性,创建类C继承B并实现A
Java基础知识——UML,创建模式,结构模式,行为模式

对象的适配器模式:使用继承只能继承一个,而如果想聚合多个对象,需要改成成员变量
Java基础知识——UML,创建模式,结构模式,行为模式

接口的适配器模式:有时不想重写接口的所有方法,则利用抽象类实现接口并重写所有方法,则继承类继承抽象类后只用重写需要使用的方法Java基础知识——UML,创建模式,结构模式,行为模式

当需要增加类方法的内容时,根据开闭原则,不能直接修改类,而是需要利用装饰模式或者代理模式
装饰模式
为对象的某个方法增加新的功能:感觉对象的适配器也能达到这个效果

Java基础知识——UML,创建模式,结构模式,行为模式

Java基础知识——UML,创建模式,结构模式,行为模式
代理模式:AOP
和装饰模式类似,区别在于装饰模式的成员变量由外部传入,代理模式成员变量由自己实例化
装饰者模式可以让使用者直观的看到增强了哪些功能(可以知道加了牛奶,奶泡等),而代理模式完全限制了使用者,只去调用代理,至于代理里面增加了什么功能,使用者是不知道,隐藏了一个对象的具体信息Java基础知识——UML,创建模式,结构模式,行为模式

外观模式:facade zookeeper 类似于提供总开关

Java基础知识——UML,创建模式,结构模式,行为模式

桥接模式:JDBC,驱动程序。将抽象化与实现化解耦,使得二者可以独立变化与装饰模式思想类似,但是区别在于装饰模式的装饰类也会实现接口,但是桥接模式的桥接类是另一个整体类

Java基础知识——UML,创建模式,结构模式,行为模式

组合模式:整体与局部(树)
Java基础知识——UML,创建模式,结构模式,行为模式
public class TreeNode {
private Vector children = new Vector();
}

享元模式:共享,string。实现形式通常为HashMap
内部状态:享元对象内部并且不用随环境改变而改变的共享部分
外部状态:随环境改变而改变的、不可以共享的状态就是外部状态

当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的
对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象。这个条件即为外部状态,

行为模式

策略模式:系统本身提供不同算法的实现,对各种算法做封装,算法之间可以相互替代(利用多态)。用户只需要决定使用哪种算法即可
计算器:计算器就是环境上下文,ICalculator就是策略角色,±就是具体策略角色
Java基础知识——UML,创建模式,结构模式,行为模式

模版方法:
参考资料
模版方法:final不能被重写,调用抽象方法,对过程进行描述
抽象方法:子类需要重写
制作豆浆:选材—>添加配料—>浸泡—>放到豆浆机就是模版方法,添加配料就是抽象方法,需要子类去重写添加不同的配料
Java基础知识——UML,创建模式,结构模式,行为模式

观察者模式(发布订阅模式):
发布者维护一个队列,订阅者订阅后加入队列,如果有消息则传入给队列中的订阅者Java基础知识——UML,创建模式,结构模式,行为模式

迭代者模式:顺序访问聚集中的对象
LInkedList 底层链表实现:使用get进行遍历时间复杂度是O(n*n)

责任链模式:每个对象持有对下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。
Tomcat的container
switch的解耦合形式Java基础知识——UML,创建模式,结构模式,行为模式
h1.operator()即可开始链的传递

命令模式:达到命令的发出者和执行者之间解耦,实现请求和执行分开。
利用司令命令士兵,一般的话肯定有耦合,但是通过中间变量command实现解耦合
structs
Java基础知识——UML,创建模式,结构模式,行为模式

备忘录模式:
参考资料

应用于备份或者回退操作,回退到某一个特定的历史状态。
Memento:备忘录(理解为Original里信息的备份)
Storage:备忘录管理员 List< Memento >
Java基础知识——UML,创建模式,结构模式,行为模式

状态模式:当对象的状态改变时,同时改变其行为
QQ的多种状态,在线离线等。正常情况下用if-else语句,过于累赘。改进后context关联一个State引用,并将在线离线等状态抽象为类,继承State
与策略模式类似,但是封装性高于策略模式。策略模式主要就是改变方法,封装性是改变状态伴随着改变方法

参考资料

Java基础知识——UML,创建模式,结构模式,行为模式

访问者模式:通常上讲,处理数据结构的元素,通常直接调用类中的方法。但是每次增加处理,都需要修改表示数据结构的类,这显然违背了“开闭原则”
开闭原则:对扩展开放,对修改关闭,提倡在不修改已有类的前提下扩展新的功能。
例子:农夫种树,将树抽象化为Tree,不同的树为Tree的实现。农夫依赖Tree(种树的动作),而Tree关联农夫(可以修改农夫的成员变量)

中介者模式:多个对象相互通信,通常强耦合。利用中介者模式,Mediator存储user的LinkedList,而每一个user只需要聚合Mediator,通过Mediator即可对其他user进行操作

参考资料
Java基础知识——UML,创建模式,结构模式,行为模式