设计模式读书笔记与总结

在最初时,假设变化不会发生,当发生变化时,通过创建抽象来隔离以后发生的同类变化。既:对程序的改动是通过增加新代码进行的,而不是改变现有代码


方法过长的时候,可能是一个坏方法“Long Method”


优先使用组合,而不是继承。因为父子的依赖关系会限制灵活性并最终限制复用性


基于敏捷开发的原则,不要为代码添加基于猜测的,实际不需要的功能。如果不知道一个系统是否需要一个功能,就不要添加他


简单工厂模式:通常解决对象创造
子类继承父类,工厂选择实际实例化子类,返回给父类对象


策略模式:面对算法时长变动时
封装变化/算法,策略类传入子类对象,调用父类方法


装饰模式:为已有功能动态添加更多功能
把装饰功能放在单独的类中,并且让类包装所修饰的对象(继承对象并且有一个对象的实例,调用继承方法前先执行原本的方法)当需要装饰对象时,可以有选择的,顺序的调用装饰功能对象


代理模式:为其他对象提供一种代理以控制这个对象的访问
实际类实现借口,代理类也实现接口,但是代理类中有实际类的引用,接口实际使用实际类的实现接口


工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂法方使一个类的实例化延迟到子类
比简单工厂模式多了每一个产品有对应的工厂类,调用的时候仅调用接口


原型模式:用原型实例指定创建对象的宗磊,并且通过拷贝原型创建新的对象
通过让类实现ICloneable接口实现,(浅复制与深复制)


模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法是的子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤。
通过父类调用需要在子类重写的抽象方法,而具体行为在子类中重写。父类并不知道具体的调用内容


外观模式:为子系统中的一组接口提供一个一致的界面,此模板式定义了一个高层接口,这个接口是的这一子系统更加容易使用
一个行为特别复杂调用多个类时,用一个统一的管理类调用,外部只调用管理类


建造者模式:又叫生成器模式讲一个复杂对象的构造与它的标示分离。是的同样的构造过程可以创建不同的标示
抽象类定义具体建造过程,过程的实现由派生类去定义。


观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察者对象,更新自己。
使用事件和委托的方式进行实现。(先有观察者模式,再有事件和委托。java中就需要自己去实现事件和委托)


抽象工厂:提供一个创建一系列相关或互相依赖对象的接口,而无需制定他们具体的类
有多个类似的工厂,对于多个同类工厂的抽象。主要使用接口,调用时使用接口调用(虽然解耦但是需要改动的地方很多,通常与反射+配置文件连用)
其实所有的简单工厂都可以用反射来去除switch分支,从而减少耦合


状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
当一个控制对象的状态转换条件过于复杂,就把状态的判断逻辑转移到表示不同状态的一系列类中。有限状态机就是一种状态模式


适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。
适配器类继承希望接口,内部有一个私有的目标对象,然后调用目标实现接口,客户使用适配器的接口(一种亡羊补牢的措施)


备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先的状态
有发起人,备忘录,管理者。发起人调用管理者,管理者管理备忘录,发起人对于备忘录的存在并不知道。隔离了变化


组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一次性
树结构的复用,叶子与结点的问题。分透明方式(不区分叶结点与分支结点)和安全方式(区分叶结点与分支结点)
希望用户忽略组合对象与单个对象的不同,一致的使用组合结构和单个对象


迭代器模式:提供一种方法顺序访问一个集合对象中各个元素,又不暴露对象内部表示
为遍历不同的结构提供如:开始,下一个,是否结束,当前项等统一接口
现在高级语言已经把这个模式做成语言的一部分。如c#中foreach(实现IEnumerable或IEnumerator)


单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点
类的构造方法私有化,定义一个公开的“构造方法”,里面判断是否构造过,其他类调用这个假的构造方法
注意多线程优化(lock)(双重锁定)


桥接模式:将抽象部分与它的实现部分分离,使他们都可以独立的变化
实现系统可能有多角度的分类,每一种分类都可能有变化,吧这总多角度都分离出来,然他们独立变化
使用组合而不是继承,进行分类


命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求进行排队或者记录请求日志,以及支持可撤销的操作
一个操作接口以及一些可以实现操作的具体操作类,具体执行操作的类,发起和控制操作的类。客户直接操作控制类
把一个请求操作的对象和具体执行操作的对象分开。


职责链接模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递请求,知道有人处理
类似于一个链表,分散if的判断,只需要知道自己的后继者


中介者模式:用一个中介对象来封装一系列对象的交互。总结着使得对象不需要显式的互相引用,降低耦合度
由一个类(本身比较复杂)来控制其他类之间的复杂交互。当出现了多对多的复杂交互时,优先考虑设计是否合理,再考虑中介者模式
中介者模式一般用于一组对象以定义良好但是复杂的方式进行通行,又不想生成太多子类。


享元模式:运用共享技术有效地支持大量细粒度的对象
一些对象除了参数都相同,则只new一遍对象,需要使用不同参数的对象时传递不同的参数
(相同部分被称为内部状态,不同部分被称为外部状态)???和对象池的区别?


解释器模式:给定一个语言,定义他的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
如正则表达式,定义语法来解释


访问者模式:表示一个作用与某对象结构中的各个元素的操作。他是你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
适用于数据结构相对稳定的系统,他把数据结构和操作数据结构的方法之间解耦合,让操作可以自由的变化
但是如果数据结构发生改变,所有的操作都需要改变,使得数据结构的改变变得困难。谨慎使用
一个固定的数据结构,里面会接受访问者接口。访问者方法实现访问者接口,接口中需要留下对每一个结构的接口,客户对数据传入具体的访问者得到返回




创建型模式:单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式
通常从工厂方法开始,需要有更多变化的时候选择其他模式


结构型模式:适配器模式,装饰模式,桥接模式,组合模式,享元模式,代理模式,外观模式



行为模式1:观察者模式,模板方法模式,命令模式,状态模式,职责链模式




行为模式2:解释器模式,中介者模式,访问者模式,策略模式,备忘录模式,迭代器模式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值