设计模式是一种常用套路,用处是用到了直接抄,只是为了方便交流。为何没人觉得设计模式有些模式纯属某语言不够灵活导致代码果而产生的?
未完待续,以后补图
一 创建型模式
1 单例模式:
目的及原因:限制对象数量
用途描述:
应用场景:
做法描述:
类图:
2 工厂模式:
目的及原因:分离创建对象过程和使用方对象方法
用途描述:
应用场景:
做法描述:
类图:
3 建造者模式:
目的及原因:
用途描述:创建对象的流程很复杂时。
应用场景:例如(java):StringBuilder类的append方法,sql的PreparedStatement,JDOM,DOMBuilder,SAXBuilder
做法描述:对象的所有属性由外的类创建
类图:
4 原型模式:
目的及原因:
用途描述:
应用场景:
做法描述:提供属性拷贝方法的类
类图:
二 结构型模式
适配器模式
目的及原因:为了能在不改已存在的函数名或类名的前提下(通过虚类/接口及实现)实现调用。
用途描述:A.a->B.b => A.a->A.a(B.b)->B.b
应用场景:
做法描述:给“调用者”传入“接口的实现”,调用者的使用接口的一个方法,接口实现里这个方法调用了被调用者的相应方法
类图:
代理模式
目的及原因:屏蔽两角色的直接互访
用途描述:减少重复代码,安全
应用场景:1静态:略;2动态:JDK动态代理,javassist字节码操作库实现,CGLIB,ASM(底层使用指令,可维护性枚举)
做法描述:
1 静态代理:用户调用的接口由两个实现类,一个是代理负责重复部分,二是核心部分分别实现不同的,代理负责调用核心部分
例如:中介租房过程的找房东,谈价格,看房证等行为都被中介代理,租房者调用中介,中介调房源,核心部分因不同的房源体验不同
2 动态代理:代理哪些内容动态生成
类图:
桥接模式
目的及原因:为解决java不能多继承的问题
用途描述:必须处理多维的问题时,例如实例类可用二维表描述的情况
应用场景:java的JDBC驱动,AWT中的peer,日志管理中的分类(格式分类和距离分类)
做法描述:
类图:
组合模式
目的及原因:
用途描述:统一的处理树形结构的每一个节点
应用场景:操作系统资源管理器,GUI的容器层次图,XML文件解析,OA系统的组织结构处理,junit单元测试构架
做法描述:
类图:
装饰器模式
目的及原因:用组合关系替代类继承,避免继承关系太多,
用途描述:可预见可能要加很多暂时未知的类
应用场景
做法描述:实现相同的虚类/接口的类的两个类是组合关系,有共有的属性的类用于继承以添加新功能
类图:
模式的模板
目的及原因:
用途描述:
应用场景
做法描述:
类图: