七大设计原则
一句话归纳七大设计原则
设计原则 | 一句话归纳 | 目的 |
---|---|---|
开闭原则 | 对扩展开放,对修改关闭 | 减少维护带来新的风险 |
依赖倒置原则 | 高层不依赖低层 | 更利于代码结构升级扩展 |
单一职责原则 | 一个类只干一件事 | 便于理解,提高代码可读性 |
接口隔离原则 | 一个接口只干一件事 | 功能解耦,高聚合,低耦合 |
迪米特法则 | 不该知道的不要知道 | 只和朋友交流,不和陌生人说话,减少代码臃肿 |
里氏替换原则 | 子类重写方法功能,不应该影响父类方法 | 防止继承泛滥 |
合成复用原则 | 尽量使用组合实现代码复用,而不用继承 | 降低代码耦合 |
GOF 23种设计模式
设计模式简介
GOF的设计模式是java基础知识和J2EE框架知识之间的一座隐性的“桥”。
设计模式分类
- 创建型:定义创建对象时的规则。
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 单例模式
- 原型模式
- 结构型:定义实现代码复用时的形式。
- 适配器模式
- 装饰器模式
- 代理模式
- 门面模式
- 组合模式
- 享元模式
- 桥接模式
- 行为型:定义代码运行阶段的处理方式。
- 策略模式
- 观察者模式
- 责任链模式
- 解释器模式
- 模板方法模式
- 迭代器模式
- 中介者模式
- 命令模式
- 访问者模式
- 备忘录模式
- 状态模式
一句话归纳23种设计原则
设计模式 | 一句话归纳 | 目的 | 生活案例 | 框架源码举例 |
---|---|---|---|---|
工厂模式(Factory) | 产品标准化,生产更高效 | 封装创建细节 | 实体工厂 | LoggerFactory、 Calender |
单例模式(Singleton) | 世上只有一个我 | 保证独一无二 | CEO | BeanFactory、Runtime |
原型模式(Prototype) | 拔一根猴毛,吹出千万个 | 高效创建对象 | 克隆 | ArrayList、PrototypeBean |
建造者模式(Builder) | 高配中配与低配,想选哪配就哪配 | 开放个性化配置 | 选配 | StringBuilder、BeanDefinitionBuilder |
代理模式(Proxy) | 没有资源没时间,得找媒婆来帮忙 | 增强职责 | 媒婆 | ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy |
门面模式(Facade) | 打开一扇门,走向全世界 | 统一访问入口 | 前台 | jdbcUtils、RequestFacade |
装饰器模式(Decorator) | 大舅二舅都是舅 | 灵活扩展,同宗同源 | 煎饼 | BufferedReader、InputStream |
享元模式(Flyweight) | 优化资源配置,减少重复浪费 | 共享资源池 | 全国社保联网 | String、Integer、ObjectPool |
组合模式(Composite) | 人在一起叫团伙,心在一起叫团队 | 统一整体和个体 | 组织架构树 | HashMap、SqlNode |
适配器模式(Adapter) | 适合自己的,才是最好的 | 兼容转换(求同存异) | 电源适配 | AdvisorAdapter、HandlerAdapter |
桥接模式(Bridge) | 约定优于配置 | 不允许用继承 | 桥 | DriverManager |
委派模式(Delegate) | 这个需求很简单,怎么实现我不管 | 只对结果负责 | 授权委托书 | ClassLoader、BeanDefinitionParserDelegate |
模板模式(Template) | 流程全部标准化,需要微调请覆盖 | 逻辑复用 | 把大象装进冰箱的步骤 | JdbcTemplate、HttpServlet |
策略模式(Strategy) | 条条大路通罗马,具体哪条你来定 | 把选择权交给用户 | 选择支付方式 | Comparator、InstantiationStrategy |
责任链模式(Chain of Responsibility) | 各人自扫门前雪,莫管他人瓦上霜 | 解耦处理逻辑 | 踢皮球 | FilterChain、Pipeline |
迭代器模式(Iterater) | 流水线上坐一天,每个包裹扫一遍 | 统一对集合的访问方式 | 逐个刷脸进站 | Iterater |
命令模式(Command) | 运筹帷幄之中,决胜千里之外 | 解耦请求和处理 | 遥控器 | Runable、TimeCase |
状态模式(State) | 状态驱动行为,行为决定状态 | 绑定状态和行为 | 订单状态跟踪 | Lifecycle |
备忘录(Memento) | 给我一剂“后悔药” | 备份 | 草稿箱 | StateManageableMessageContext |
中介者(Mediator) | 联系方式我给你,怎么搞定我不管 | 统一管理网状资源 | 朋友圈 | Timer |
解释器模式(Interpreter) | 我想说“方言” | 实现特定语法解析 | 摩斯密码 | Pattern、ExpressionParser |
观察者模式(Observer) | 到点就通知我 | 解耦观察者与被观察者 | 闹钟 | ContextLoaderListener |
访问者模式(Visitor) | 横看成岭侧成峰,远近高低各不同 | 解耦数据结构和数据操作 | KPI考核 | FileVisitor、BeanDefinitionVisitor |
设计模式混用
常见的设计模式有这么多,但当我们在业务上实现某个需求的时候很难说只用某一种设计模式就可以解决复杂的业务常用,常常需要多种不同的设计模式混合使用,在不经意间就将一些设计模式杂糅起来了,可以参考下图的关系来定义设计模式的混用技巧。