【设计模式】周末在家两天,终于肝出来这份设计模式,还挺全
本文目录
-
- 序
- 设计模式的分类
-
- 创建型设计模式(Creational)
- 结构型设计模式(Structural)
- 行为型设计模式(Behavioral)
- 新设计模式
- 七大架构设计原则
- 各设计模式对比及编程思想总结
- 设计模式之间的混用关系
- End
序
设计模式最早的出现是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著的
《Design Patterns: Elements of Reusable Object-Oriented
Software》(1995年),也被称之为四人组他们四人首次总结出一套软件开发可以反复使用的经验,帮助我们提高代码的可重用性、系统的可维护性等,解决软件开发中的复杂问题。
设计模式总结的是经验,而不是一种背书。
设计模式的分类
创建型设计模式(Creational)
这类设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象,能使程序在判断针对某个给定实例需要创建哪些对象时更加灵活,即可以提升代码的灵活性和可复用性。
该类型包括:工厂方法模式,抽象工厂模式,单例模式,原型模式,建造者模式
结构型设计模式(Structural)
这类设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
该类型包括:代理模式,门面模式,装饰器模式,享元模式,组合模式,适配器模式,桥接模式
行为型设计模式(Behavioral)
行为模式负责对象间的高效沟通和职责委派。
该类型包括:模板方法模式、策略模式、责任链模式、迭代器模式、命令模式、状态模式、备忘录模式、中介者模式、解释器模式、观察者模式、访问者模式
新设计模式
包括:对象池模式,规格模式,空对象模式,雇工模式
七大架构设计原则
原则 |
---|
开闭原则(Open-Closed Principle,OCP) |
依赖倒置原则(Dependence Inversion Principle,DIP) |
单一职责原则(Simple Responsibility Principle,SRP) |
接口隔离原则(Interface Segregation Principle,ISP) |
迪米特法则(Law of Demeter,LoD) |
里氏替换原则(Liskov Substitution Principle,LSP) |
合成复用原则(Composite/Aggregate Reuse Principle,CARP) |
各设计模式对比及编程思想总结
设计模式 | 一句话归纳 | 目 的 | 生活案例 | 框架源码举例 |
---|---|---|---|---|
工厂模式 | 产品标准化, 生产更高效 | 封装创建细节 | 实体工厂 | LoggerFactory、Calender |
单例模式 | 世上只有一个我 | 保证独一无二 | CEO | BeanFactory、Runtime |
原型模式 | 拔一根猴毛, 吹出千万个 | 高效创建对象 | 克隆 | ArrayList、PrototypeBean |
建造者模式 | 高配中配与低配, 想选哪配就哪配 | 开放个性配置步骤 | 选配 | StringBuilder、 BeanDefinitionBuilder |
代理模式 | 没有资源没时间,得找媒婆来帮忙 | 增强职责 | 媒婆 | ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy |
门面模式 | 打开一扇门, 通向全世界 | 统一访问入口 | 前台 | JdbcUtils、RequestFacade |
装饰器模式 | 他大舅他二舅, 都是他舅 | 灵活扩展、 同宗同源 | 煎饼 | BufferedReader、InputStream |
享元模式 | 优化资源配置, 减少重复浪费 | 共享资源池 | 全国社保联网 | String、Integer、ObjectPool |
组合模式 | 人在一起叫团伙, 心在一起叫团队 | 统一整体和个体 | 组织架构树 | HashMap、SqlNode |
适配器模式 | 万能充电器 | 兼容转,换电源适配 | / | AdvisorAdapter、HandlerAdapter |
桥接模式 | 约定优于配置 | 不允许用继承 | 桥 | DriverManager |
模板模式 | 流程全部标准化, 需要微调请覆盖 | 逻辑复用 | 把大象装进冰箱 | JdbcTemplate、HttpServlet |
策略模式 | 条条大道通北京, 具体哪条你来定 | 把选择权交给用户 | 选择支付方式 | Comparator、 InstantiationStrategy |
责任链模式 | 各人自扫门前雪, 莫管他人瓦上霜 | 解耦处理逻辑 | 踢皮球 | FilterChain、Pipeline |
迭代器模式 | 流水线上坐一天, 每个包裹扫一遍 | 统一对集合的访问方式 | 逐个检票进站 | Iterator |
命令模式 | 运筹帷幄之中, 决胜千里之外 | 解耦请求和处理 | 遥控器 | Runnable、TestCase |
状态模式 | 状态驱动行为, 行为决定状态 | 绑定状态和行为 | 订单状态跟踪 | Lifecycle |
备忘录 | 失足不成千古恨, 想重来时就重来 | 备份,后悔机制 | 草稿箱 | StateManageableMessageContext |
中介者模式 | 联系方式我给你, 怎么搞定我不管 | 统一管理网状资源 | 朋友圈 | Timer |
解释器模式 | 我想说“方言”, 一切解释权归我 | 实现特定语法解析 | 摩斯密码 | Pattern、ExpressionParser |
观察者模式 | 到点就通知我 | 解耦观察者与被观察者 | 闹钟 | ContextLoaderListener |
访问者模式 | 横看成岭侧成峰, 远近高低各不同 | 解耦数据结构和数据操作 | KPI考核 | FileVisitor、BeanDefinitionVisitor |