8年前深究设计模式,现如今再次回锅~ 还是大话设计模式 这本书还是可以的
大话西游经典的台词:“曾经有一份真挚的爱情摆在我面前,我没有珍惜,等我失去的时候,我才后悔莫及,人世间最痛苦的事莫过于此。如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:我爱你。如果非要在这份爱上加上一个期限,我希望是一万年!” 当然这是强蹭流量 没有关系
设计模式最重要的看懂那几个线:
https://www.cnblogs.com/itc0z0sti/p/3309584.html
简单工厂
super调用 factory中createCashAccept具体:
case "":
case "":
default:
策略:封装变化 匹配女神
单例
spring enum 基础之重蹈覆辙-CSDN博客
代理
调用代理类 代理类调用真实对象方法 两者都实现了一个接口
原型:不知不觉ing 注意
浅克隆:实现cloneable接口 重写clone方法,引用类型 只克隆引用 同一块地址
深克隆:基本数据类型和引用类型指向的对象都会被复制,真正的复制一份,重新开辟空间保存
重写clone,clone嵌套clone,对象 引用类型变量的类 均实现cloneable接口
序列化流:对象 引用对象都序列化
首先创建ByteArrayOutputStream内存数组输出流,创建ObjectOutputStream序列化流,并传入内存数组输出流,使用序列化流的writeobject方法将要序列化的对象写入内部数组中
创建一个ByteArrayInputStream内存数组读取流,传入一个读取数据的数组,这个数组通过内存数组输出流的toByteArray方法获得,这个数组里面的数据其实就是已经被序列化成二进制数据的对象
最后创建一个ObjectInputStream反序列化流,并传入内存数组读取流,使用反序列化流的readobject方法将数组中的对象的信息,反序列化出来。
反序列化出的对象就是一个新的对象,完成了深克隆。
当然还可以固定要被序列化对象的版本号,定义一个private static final long serialVersionUID
注意静态的成员和transient关键字修饰的成员不能被序列化
开源工具:json spring的BeanUtils Cglib的BeanCopier
Java中的深克隆和浅克隆的原理及三种方式实现深克隆_浅克隆和深克隆的实现-CSDN博客
适配器
装饰器
HttpServletResponseWrapper
桥接 抽象实现分离
外观
享元 缓存共享对象
外部对象随环境改变而改变 / 内部对象可共享
组合 对象组合成层次结构
模板
命令
责任链
FilterChain Filter
状态
对象行为
观察者
当更改一个对象的状态可能需要更改其他对象,并且实际的对象集事先未知或动态更改时
JDK:java.util.Observable
Spring:org.springframework.context.ApplicationListener
中介者
迭代器
简化聚合,定义迭代器 很少用
访问者
扩展 复用