设计模式总结

---《Head First 设计模式》读书笔记,这是一本还不错的书,语言比较诙谐幽默,事物拟人化,初学设计模式比较有用

1.策略模式

描述:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

自我描述:将行为类别设计为“接口”,作为事物类的实例变量,具体的行为/算法与事物相互独立,这样可以动态改变行为

典型例子:封装鸭子的“飞行”与“叫”的行为,与鸭子类分开

设计原则:封装变化;多用组合,少用继承;针对接口编程而不是实现

2.观察者模式

描述:在对象之间定义一对多的依赖,这样,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新

自我描述:定义主题(被观察者)和观察者,其中主题拥有注册和移除观察者的方法,通知方式是主题调用观察者接口中定义的方法

典型例子:气象站监测温度湿度变化,并通知显示板更新显示值

设计原则:为交互对象之间的松耦合设计而努力

3.装饰者模式

描述:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择

自我描述:将类原始属性与附加的属性分开,附加属性独立为继承原始类的抽象类,在新对象构造上“包装”原始对象

典型例子:饮料与多种调料类型

设计原则:对扩展开放,对修改关闭

4.工厂模式

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

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

自我描述:针对同一流程不同的实现,将流程抽象成工厂接口,在具体子类中实现具体方法

典型例子:工厂生产pizza,不同地域的工厂制造风格不一样

设计原则:依赖抽象,不要依赖具体类

5.单件模式

描述:确保一个类只有一个实例,并提供全局访问点

自我描述:在类的实例化方法是私有的,对象只允许创建一次,之后均返回创建好的对象,方法和变量定义为static。一般使用同步或者预先创建来解决实例化问题

典型例子:线程池,缓存等只需要一个实例对象

6.命令模式

描述:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,也支持可撤销操作

自我描述:对请求定义通用的接口,在具体请求类中实现方法,实现请求发出与执行解耦

典型例子:遥控器编程,设置和改变不同的命令。管理队列请求,日志请求

7.适配器模式与外观模式

描述:适配器模式:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用

自我描述:比较好理解,即将原本复杂或者不合适的接口,通过简化和调整,改变成符合需要的接口

典型例子:现实中的电源适配器,比较流行的“一键”功能操作

设计原则:只和朋友交谈

8.模板方法模式

描述:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

自我描述:提取出共有的方法放在抽象类中,而将不同的方法定义为抽象方法在子类中实现。是代码“复用”的方式之一,可以定义“钩子”,子类通过覆盖来省略某些步骤

典型例子:泡咖啡与茶的步骤,以及通用排序算法中“比较”方法的多样化

设计原则:由超类主控一切,在需要的时候调用子类

9.迭代器与组合模式

描述:迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示

组合模式:允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合

自我描述:迭代器提供了一个通用接口访问底层多样的数据集,组合模式能够兼容访问对象与对象的“组合”

典型例子:遍历访问数据结构的不同聚合,比如ArrayList,数组等,而不向外暴露细节。访问组合对象,如多级菜单的选择等等

设计原则:类应该只有一个改变的理由

10.状态模式

描述:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类

自我描述:如果一个物体会在多种状态之间改变,那么应当定义一个状态抽象类并实例化所有状态,用一个实例变量纪录当前状态,这个实例变量将实际操作交给相应状态的方法来处理

典型例子:自动售货机,基于内部状态有不同的行为

11.代理模式

描述:为另一个对象提供一个替身或占位符以访问这个对象

自我描述:远程代理使用JAVA RMI进行跨网络调用,就像本地调用一样,类似RPC。虚拟代理用于需要对象创建前作为“替身”。保护代理用于权限控制访问

典型例子:远程访问机器,图像处理代理等

12.复合模式

描述:结合两个或两个以上的模式,组成一个解决方案,解决一再发生的一般性问题

自我描述:运用多种模式处理更复杂的实际问题

典型例子:MVC,结合观察者模式(模型),策略模式(控制器)和组合模式(组合),

13.桥接模式

描述:独立地改变实现和抽象层次

典型例子:遥控器和TV接口的扩展

14.生成器模式

描述:封装一个产品的构造过程,并允许按步骤构造

典型例子:行程规划,即定制指定内容的步骤,最后得到一个完整的规划对象

15.责任链模式

描述:让一个以上的对象有机会能够处理某个请求

典型例子:处理鼠标和键盘的事件。各个可处理请求的对象组成一个责任链,如果链中某个对象不能处理请求,就把请求转发给后继者

16.蝇量模式

描述:让某个类的一个实例能用来提供许多“虚拟实例”

典型例子:将多个实例对象使用“集中管理”方式来处理,例如维护庭院中众多的树

17.解释器模式

描述:为语言创建解释器

典型例子:实现一个简单的语言,用该模式定义语法的类,用解释器解释句子

18.中介者模式

描述:集中相关对象之间复杂的沟通和控制方式

典型例子:智能家居系统,或GUI组件,对象之间存在复杂的交互,使用中介者统一管理所有请求,解耦多个对象

19.备忘录模式

描述:让对象返回之前的状态

典型例子:在游戏中能够储存进度。在外部储存系统关键对象的重要状态,维护关键对象的封装

20.原型模式

描述:创建给定类的实例的过程很昂贵复杂,使用原型模式

典型例子:产生随机的现有的对象的复制,作为新的实例,一般在随机产生的情况下使用

21.访问者模式

描述:为对象的组合增加新的能力,且封装不重要

典型例子:使用一个独立的对象提取多个对象的状态并提供访问,在组合结构中加入新的操作,不改变结构本身
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值