3.2 DesignPattern学习总结

1.什么是设计模式:可重复使用的解决方案,每种模式描述了某一类问题的通用解决方案。

设计模式的核心作用就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为模式是将不同行为代码解耦。

借助设计模式,将大坨代码拆分成职责更单一的小类,让其满足开闭原则,高内聚低耦合特性,以此来控制和应对代码的复杂性,提高可扩展性。

2. 设计模式的四个部分:

1) 模式名称

2) 待解问题:何时需要运用该模式

3) 解决问题:抽象的解决方案描述,组成元素(类和对象),他们间的关系,职责和合作

4) 结论:方案的利弊,以及其对系统的可扩展性,可移植性的影响

3.分类

1) 功能分

创建模式(creational patterns):对类的实例化过程的抽象;

结构模式(structural patterns):将类或者对象结合到一起形成更大的结构;

行为模式(behavioural patterns):在不同对象间划分责任和算法的抽象化

2)方式分

类模式:以继承的方式实现模式,静态的

对象模式:以组合的方式实现模式,动态的

4. 创建型 - 主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码

4.1 : 单例模式Singleton

1) 为何使用:处理资源访问冲突;表示全局唯一,例如,配置信息类

2)实现需要关注的点:线程安全;延迟加载;性能(是否加锁)

4.2 : 工厂模式Factory

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

抽象工厂模式:提供了一个接口,用于创建相关或依赖的对象的家族,而不需要明确指定具体类

5.结构型主要总结了一些类或者对象组合在一起的经典结构,这些经典结构解决特定应用场景的问题。

5.1 :代理模式 Proxy

在不改变原始类(代理类)的情况下,通过引用代理类来给原始类附加功能。通过代理类继承原是类的方法来实现。

应用场景:1) 业务系统的非功能性开发,比如统计,监控,鉴权,限流,事务,幂等,日志;RPC,缓存中的应用;

5.2 :装饰器模式Decorator

主要解决继承过于复杂的问题,通过组合来替代继承。主要的作用是给原始类添加增强功能,这也是判断是否该用装饰器模式的一个重要依据。同时,可以对原始类嵌套使用多个装饰器。

装饰器是对功能的增强。同样是组合关系的代码结构,代理模式中,代理类附加的是跟原始类无关的功能,而在装饰器模式中,装饰器类附加的是跟原始类相关的增强功能。

5.3 :适配器模式Adapter

做适配器,将不兼容的接口一起工作,就像一个USB转换头。

一般来说,适配器模式可以看作一种补偿模式,用以补救设计上的缺陷,应用场景是接口不兼容。提供跟原始类不同的接口,代理模式和装饰器模式提供的都是跟原始类相同的接口。

主要用于:封装有缺陷的接口设计;统一多个类的接口设计;替换依赖的外部系统;兼容老版本接口;适配不同格式的数据;

6.行为型

主要解决类或者对象之间的交互问题

6.1 观察者模式Observer - 发布订阅模式 Publish-Subscribe

1)在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都自动收到通知。其将观察者和被观察者解耦。

2)应用场景:邮件订阅;RSS

6.2 模板模式TemplateMethod

1)在一个方法中定义一个算法框架,并将某些步骤推迟到子类中去实现。模板方法可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的算法可以理解为广义的业务逻辑。

2)主要解决复用和框架的扩展两个问题。基于继承关系实现,子类重写父类的抽象方法,是一种类之间的关系。

复用:模板方法可以将算法中不变的流程抽象到父类中,将可变的部分留给子类来实现。所有的子类都可以复用父类中模板方法定义的流程代码。

框架的扩展:模板常用在框架的开发中,让框架用户可以在不修改源码的情况下定制框架的功能。

6.3 策略模式Strategy

定义一族算法类,将每个算法分别封装起来,让他们可以互相替换。策略模式可以使算法的变化独立于使用他们的代码。

策略模式解耦的是策略的定义,创建,使用三个部分。

1)策略的定义

策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,其基于接口而非实现编程,可以灵活的替换不同的策略。

2)策略的创建

创建由工厂类完成,封装策略创建的细节

3)策略的使用

一般包含一组可选策略,客户端通过两种方式选择使用哪种策略:编译时静态确定;运行时动态确定。掐红运行时动态确定为典型应用场景。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。