2018-1.21
单例模式更新:
DoubleCheckLock 双重校验锁
HungryMan 饿汉式
LazyMan 懒汉式
LazyInitialization 嵌套类式
EnumSingletion 枚举式
2018-1.23 工厂模式-更新
简单工厂
Stationery 文具接口
Pencil 铅笔
Rubber 橡皮
StationeryFactory 文具工厂(按照参数创造)
Consumer 消费者
————————————————————————————————
方法工厂
Stationery 文具接口
Pencil 铅笔
Rubber 橡皮
Factory 工厂接口
PencilFactroy 铅笔工厂
RubberFactory 橡皮工厂
Consumer 消费者
————————————————————————————————
抽象工厂:
简介:世界上本没有路... 对不起拿错剧本了.鲁迅的棺材板压不住了
原本有一套制造文具的生产规范[StationeryFactory](生产橡皮-createRubber)(生产铅笔-createPencil)
然后有了有一个文具工厂(AbstractStationeryFactory)
然后出现了得力和晨光.也就是(ChenGuangFactory)/(DeLiFactory)
他们想让文具工厂给自己生产,那就要与文具工厂合作(extends),然后按照规范(createRubber)让代工厂按照自己的要求给我造东西出来
Stationery 文具接口
Pencil 铅笔(abstract)
Rubber 橡皮(abstract)
DeLiPencil 得力铅笔
DeliRubber 得力橡皮
ChenGuangPencil 晨光铅笔
ChenGuangRubber 晨光铅笔
StationeryEnum 文具的类型定义和对应包名
StationeryFactory 文具工厂接口(生产铅笔,生产橡皮)
AbstractStationeryFactory 抽象文具工厂(代工厂)(abstract)
ChenGuangFactory 晨光工厂(给自家铅笔自定属性)
DeLiFactory 得力工厂(给自家铅笔自定属性)
Comsumer 消费者
2018-1.25
创造者模式-更新
简介:
客户不需要知道生产细节,只需要下发命令
生产,组装都会帮你做好
Pen 钢笔类
Refill 笔芯
RefillFactroy 笔芯制造厂
Penshell 笔壳
PenShellFactory 笔壳制造厂
PenBuilder 钢笔建造接口
RedPenBuilder 红笔组装
BlackPenBuilder 黑笔组装
Director 手持Builder,调用生产
Client 客户
2018-1.27
原型模式-更新
需求:我们有一万个造衣服的订单.先在要从数据库取出来.将pojo
我觉得原型很关键的就是“复制”而不是"引用传递"
才疏学浅..实力真的有限
Client 下发任务
ClothesOrder 衣服订单
Department 部门信息
2018-1.28
适配器模式-更新
简介:比如两个系统对接.但是对方的结构不适用于我们的系统
我们需要把对方的结构转换为我们的结构
场景:一个美国人想和一个**人进行交流,那他们就需要一个翻译器
那这个翻译器就是适配起了咯
English 英国人
Chinese **人
EnglishAdapter 中英翻译器
ChineseAdapter 英中翻译器
Client 测试
2018-1.29
观察者模式-更新
如果自己写的话:
Observable 被观察的类
这个被观察的类.有注册/删除观察者的方法,可以用list等等存储这些观察者
一个通知方法notifyObservers(String message),然后遍历观察者,向他们发送消息(也就是调用他们的update)
Observer 观察者
一个update方法.一般观察者多个会定义接口实现规范
简介:某些商城.搞一些啥花里胡哨的活动.流量非常大,并发量就很高。
流量可以采用限流等一些方法.那每秒钟那么多的订单下去.数据库io就很鸡儿吃力了
那就可以做缓存.先把订单放起来.等系统缓一缓再存保证不会崩掉把数据同步到数据库
可以用观察者模式.监听消息.进行同步
OrderSystem 订单系统
Synchronization 观察者.
Client 测试
2333我真是越来越不走心了...doge
2018-1.29
访问者模式-更新
简介:有
系统A,系统B
用户:wangzai
通过授权中心让用户访问系统A,系统B
我的妈耶...把系统的接口名写成System是真滴蠢...一直和lang.System弄错..也许这就是智障吧
调用链: 传入系统A,B,放在List中——>传入用户->遍历list调用accept(Visitor visitor)方法->调用visitor.saveSystemBPermission(this)把自己传过去->保存"this"->调用"this"查看系统文件
System 系统接口
SystemA 系统A
SystemB 系统B
Visitor 用户接口
WangZai 用户“wangzai”
AuthorizationCenter 授权中心
Client 测试
2018-1.29
装饰器模式-更新
简介:可以理解为在原有基础上扩展功能而不会产生类膨胀
Component(抽象组件):需要装饰的抽象对象,一般是接口或者抽象类。
ConcreteComponent(具体组建):是我们需要装饰的对象,他也是 抽象组件 的实现
Docorator(抽象装饰类):也是抽象构件角色的子类,在它的属性里必然有一个 private 变量指向 Component。
ConcreteDecorator(具体装饰类):具体的装饰类
场景:
我们有一个业务
UserService 用户接口
UserServiceImpl 用户接口实现
现在有查询用户信息
然后我们需要为他添加一个功能:删除用户
继承?如果以后又要添加新功能.让你来个添加用户,再继承,再来一个功能,再继承...导致维护难度较大
使用装饰器模式可以缓解这尴尬的气氛
UserService 用户服务接口
UserServiceImpl 用户服务实现
UserServiceDecorator 用户服务装饰抽象
UserAddDecorator 用户添加功能
UserDeleteDecorator 用户删除功能
Client 测试
2018-1.29
外观模式-更新
简介:将一系列的业务操作整合.减少客户端与业务的接触
我觉得controller+service 也就是外观模式了
前端一个请求->controller,帮你把业务调用好
Client 客户端
controller 控制器
DepartmentService 部门服务
UserService 用户服务
2018-1.30
模版模式-更新
简介:定义抽象方法.组成顶级逻辑,抽象方法由子类实现
Client 测试
Game 游戏接口
Fgo Fgo游戏
War3 War3游戏
2018-1.30
代理模式-更新
简介:我们使用spring进行一些对数据库的操作一般都会开启开启事务.通过aop将事务管理器行为插入到我们的业务,aop与动态代理的关系也是非常的亲密
静态代理是编译期间就确定好的代理关系,而动态代理是运行期间由JVM通过反射等技术生成的代理对象
静态代理:
UserDao 持久化层
UserService 用户接口
UserServiceImpl 用户接口实现
UserServiceImplProxy 用户接口代理对象
Client 测试
——————————————————————————————
动态代理:
我们使用JDK包中的java.lang.reflect.Proxy来生成代理对象
实现代理需要使用的方法static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的
Class<?>[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型
InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为
ProxyHandler 代理实例
UserDao 持久化层
UserService 用户业务接口
UserServiceImpl 用户业务实现
Client 测试
2018-1.31
备忘录模式-更新
简介:也称为快照模式,用来存储对象内部状态的一种模式
成员Originator的方法一般有: 创建备忘录/恢复到某一个状态/添加状态
成员Caretaker的方法一般有: 创建新的检查点(调用创建备忘录后add到缓存)/将Originator恢复到某一状态
笑哭...感觉Caretaker 和 Originator 很相似啊.
但是Originator的职责是:保存备忘录状态(一些信息).进行创建备忘录.修改(更新/退回)当前的状态
Carataker的职责是:保存备忘录实体,用来恢复备忘录,并更新/同步 Originator 的状态(信息)
多重检查点就是一个检查点(索引)对应了一个状态(备忘录的一些信息)和一个备忘录实体
白盒:
Memento 备忘录
Originator 备忘发起
Caretaker 备忘录管理者
Client 测试
———————————————————————————————
多重检查点(与白盒相同的结构,只是支持多个状态):
Memento 备忘录
Originator 备忘发起
Caretaker 备忘录管理者
Client 测试