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)策略的使用

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355