# DesignPatterns_Study **Repository Path**: huathy/design-patterns_-study ## Basic Information - **Project Name**: DesignPatterns_Study - **Description**: 设计模式学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-02 - **Last Updated**: 2021-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: 学习笔记 ## README **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - [策略模式](#%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F) - [模板方法(模板方法模式Template Method Pattern)](#%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8Ftemplate-method-pattern) - [装饰器模式](#%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F) - [装饰器模式与适配器模式的区别](#%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F%E4%B8%8E%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB) - [观察者模式 Observer Pattern](#%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F-observer-pattern) 1. Adapter:适配器模式 2. Bridge:桥接模式 3. Builder:建造者模式 4. Factory:工厂模式 5. ProtoType:原型模式 6. Proxy:代理模式 7. Singleton:单例模式 8. Delegate:委派模式 9. Strategy:策略模式 10. Template:模板模式 11. Decorator:装饰器模式 12. Observer:观察者模式
# 委派模式 # 策略模式 指定义了算法家族,分别封装起来,使其之间可以互相替换。使此模式的变化不会影响到使用算法的用户。 可以避免多重的if...else...和switch语句 策略模式符合开闭原则。可以提高算法的保密性和安全性。 缺点: 1. 客户端必须知道所有的策略,并自行决定使用哪一个策略类。 2. 代码中会产生非常多的策略类。 # 模板方法(模板方法模式Template Method Pattern) 是指定义一个算法骨架,并允许子类为一个or多个步骤提供实现。 模板方法使得子类可以在不改变算法结构的情况下,重新定义某些算法步骤。 属于行为型设计模式。 适用场景: 1. 一次性实现一个算法不变的部分,并将可变的部分留给子类实现。 2. 各子类中公共的行为被提取出来并集中到一个公共的类中,减少冗余。 eg:AbstractList,HttpServlet,mybatis中的BaseExecutor 优势:提高代码复用、扩展性,符合开闭原则 缺点:类数目增加,间接增加系统复杂度,继承关系自身缺点,如果父类增加抽象方法,所有子类都要实现一遍。 有的模板模式回使用静态代理实现改进。 # 装饰器模式 ## 装饰器模式与适配器模式的区别 \ | 装饰器模式 | 适配器模式 ---|---|--- 形式 | 是一种非常特别的适配器模式 | 没有层级关系,而装饰器模式有层级关系 定义 | 装饰者和被装饰者都实现同一个接口,主要目的是为了扩展之后依然保留OOP关系 | 适配器和被适配者没有必然的联系,通常采用继承或者代理的形式进行包装 关系 | 满足is-a的关系 | 满足has-a的关系 功能 | 注重覆盖 | 注重兼容、转换 设计 | 前置考虑 | 后置考虑 # 观察者模式 Observer Pattern 1. 观察者模式定义了对象之间一对多的依赖,让观察者对象同时监听一个主体对象,当主体对象发生变化时,他的依赖者(观察者)都会收到通知并更新。 2. 属于行为型设计模式。 3. 观察者模式也叫发布订阅模式。 4. guava,轻松落地观察者模式的一种方案。 ### 观察者模式优点 1. 观察者与被观察者之间建立了一个抽象的耦合。 2. 观察者模式支持广播通信。 ### 观察者模式缺点 1. 观察者之间没有过多的细节依赖,提高了时间消耗和程序复杂度。 2. 使用要得当,避免循环调用。