前言在准备做Eclipse的UML图的之前,先复习一下23种设计模式。
建造型 面向对象的基础是对象,如何new对象是一门学问.
动机:1新的费时2.提取新的代码3.IOC
- 单例模式,多例模式,(多例+可新) - 类似缓存,减少new
- 简单工厂模式,工厂模式 一维的new,
- 抽象工厂模式 - 二维的new
- 建造者模式 - 多维的new(一般会封装的特别简单)
- 原型模式 大对象用复制将比一个一个新的更快
实现: IOC + 克隆
结构型 管理和组织对象.
动机: 1.复用已有对象 2.管理对象之间关系
- 组合模式 聚合多个对象,
- 适配器模式 缺省类适配(常用-httpservlert的父类) 对象适配(兼容用户和第三方 内部转化,实现多继承,其他部分接口没定义好之前充当代替作用)
- 桥接模式 一个类中存在2个多变的类,就可以拆分出来,中间通过一个类来连接。如业务bean实体bean
- 装饰模式 透明的添加功能 IO
- 代理模式 私密的控制权限(可以添加,限制功能) aop
- 门面模式 定义高层接口 slf4j
- 享元模式 减少内存 string
实现: 组合 继承
行为型 对象之间的通信
动机: (如何实现具体的业务)
- 责任链模式 想想流水线 requst soa 烽火台的context
- 命令模式 命令和处理者解耦 drools 规则引擎的简单实现
- 解释器模式 将内容解释成指定内容 规则引擎里面的一条解释指令
- 迭代器模式 按顺序保护内部对象 不解释
- 中介者模式 mvc中的c 一般用不到,同时慎用.小心错误的调停 angular的双向数据绑定
- 备忘录模式 保存一个对象的某个状态 撤回操作, 但是一般用历史表存放.用来提高性能
- 观察者模式 当一个对象被修改时,则会自动通知它的依赖对象 单向数据绑定,订阅,好友上线提示
- 状态模式 类的行为是基于它的状态改变的 工作流
- 策略模式 一个类的行为或其算法可以在运行时更改 , 就是多态.
- 模板模式 定义主要流程,具体实现交给子类 sun的排序 httpservlert 的doGet
- 访问者模式 稳定的数据结构和易变的操作耦合问题 url拦截和过滤器,转发
总结
对象是一切 如何new和管理对象是个大问题
紧记:合理利用内存(少用new). 组合 继承 重写 回调 这就可以实现所有模式。实现只是小事
如果我自己设计整合框架的话:
- 我会不让用户用new,统一使用一个工厂,来实现真正的IOC,当需要新对象时上报
- 并整合第三方框架给用户使用的时候,使用门面模式-定义高级接口.避免直接引用第三方jar的出现
- 模拟requset 定义上下文,存储一次交易的所有信息。
- 用Config类代替xml
- 用Map代替实体类