`
0428loveyu
  • 浏览: 28530 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

《设计模式那点事》 - 书摘精要

 
阅读更多
(P03)

设计模式是实际经验的积累和总结,着重解决具体的实际问题;

(P04)

在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦,因为使用的是抽象类型,因此具体实现的改变不会影响抽象类型的改变;

“对象组合” —— 是指在一个对象中含有另外一个对象的引用,从而可以使用该内部对象的引用作出一些处理行为;

“开-闭原则”是一种很抽象的设计原则,更像是一种倡导的口号,其他设计原则都是为了实现“开-闭原则”的具体原则;

(P5)

设计模式或将成为改变一个人职场命运、一个企业成败关键、甚至一个社会经济发展的重要因素;

设计模式就像一本武功秘笈,要在学习中有所思、有所想、有所悟,才能达到软件设计思想的最高境界;

(P5)

设计模式分类:

按照范围来分,设计模式可以分为“类模式”和“对象模式”:

“类模式” —— 用来处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了;

“对象模式” —— 是处理对象间的关系,这些关系在运行时是可以变化的,更具动态性;

按照目的来分,设计模式可以分为“创建型模式”、“结构型模式”和“行为型模式”:

“创建型模式” —— 用来处理对象的创建过程;

“结构型模式” —— 用来处理类或者对象的组合;

“行为型模式” —— 用来对类或对象怎样交互和怎样分配职责进行描述;

按照目的的分类是采用最多的分类方式;

(P7)

让理论指导实践,实践充实理论,这样就会形成一种良性循环,不断提升自己的理论、实践能力;

(P49)

所谓“对象组合”,就是让对象作为类的成员变量,通过构造函数或者 set 方法给类对象的实例变量赋值;

一般“抽象工厂”和“工厂方法”都是联合在一起使用,这样的系统结构更加具有灵活性和弹性;

当设计一个软件系统的时候,要尽可能地对系统中出现的各种事物进行抽象,从而建立基础的抽象底层,这样做的目的就是让软件结构更加框架化、系统化,系统结构更加灵活,易维护、易扩展;

(P50)

抽象和具体实现的区别就在于:有了抽象,能做很多事情,并且新增功能不会对原系统的稳定性造成影响,系统更加模块化,软件更加易复用;而具体实现只能完成一件事情,并且新增功能对原系统影响比较大,对于相同结构软件不能复用,大大降低了开发效率,而且程序不易扩展;

(P51)

“工厂方法模式”和“抽象工厂模式”的区别:

“工厂方法模式”通过继承的方式实现应用程序的解耦,而“抽象工厂模式”则通过对象组合的方式实现程序解耦;

“工厂方法模式”用来创建一个抽象产品,具体工厂实现工厂方法来创建具体产品,而“抽象工厂模式”用来创建一个产品家族的抽象类型;

(P72)

“建造者模式”和“抽象工厂模式”的区别:

“建造者模式”着重于分步骤构造一个复杂对象;“抽象工厂模式”着重于多个系列的产品对象的构造;

“建造者模式”是在最后一步返回具体产品;“抽象工厂模式”是立即返回具体产品;

(P81)

在 Java 中,只有实现了 Cloneable 接口的类才会被虚拟机认为是能够克隆的;

(P129)

类适配器和对象适配器是外部对象和适配器的一种关联关系,类适配器使用继承方式,它是一种强关联关系,而对象适配器是利用组合的方式,将外部对象传入,它是一种弱关联关系;

(P133)

适配器设计模式主要用于系统的升级扩展,或者版本兼容性上,没有哪一个系统分析师会在软件设计阶段使用适配器模式的。适配器模式可以很好地解决版本兼容问题;

(P139)

“耦合” —— 就是两个实体的行为的某种强关联;

“脱耦” —— 将它们的强关联去掉,就是耦合的解脱,或称脱耦;

桥接模式中的脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化;

(P147)

桥接模式的魅力就在于将抽象和实现解耦,从而使两者可以相对独立地变化,而互不影响;

(P155)

软件设计模式的初衷就是为了解决软件复用、内聚、耦合等问题。在类与类之间,应该尽量使用弱关联的关系,如果两个类的关系确实非常紧密,则使用继承的强类型关系。一般情况下,要尽量避免使用高耦合度的设计方式;

(P156)

继承是一种牢不可分的强关联关系,而聚合的委托关系则是一种弱关联关系,后者有利于类之间的解耦;

(P182)

组合模式,主要处理树形结构以表示“部分-整体”的层次结构;

(P206)

设计模式是封装变化的最好阐释,无论哪一种设计模式针对的都是软件系统中存在“变化”的部分,然后使用抽象对这些“变化”的部分进行封装;

(P223)

外观没有封装子系统的类,只提供简化的接口;

(P381)

在一个软件项目的设计中,一般不建议采用中介者模式;

(P463)

抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据;

(P499)

访问者模式适用于数据结构相对稳定算法又易变化的系统,因为访问者模式使得算法操作增加变得容易。如果系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式;

(P509)

“开-闭”原则告诉我们,一个软件实体对于外部的需求变化,应该通过扩展来实现,而不是修改现有的内容来实现;

(P510)

在设计一个软件系统结构时,尽可能地将会发生变化的内容独立出来,单独进行封装,而将这一部分作为抽象为其他部分调用;

(P528)

依赖倒置原则是实现“开-闭”原则的重要途径,在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦;

(P536)

依赖倒置原则的核心是依赖抽象编程,而不依赖具体实现类;

接口属于客户,不属于它所在的类层次结构;

(P544)

在实际的软件设计中需要面向抽象编程,在程序中使用抽象类型作为参数类型,然后将具体的子类型作为实际运行的参数传入,实现具体的行为处理;

(P545)

迪米特法则实现要点是:尽量不要让类和类之间建立直接的关系,如果需要建立关系,最好通过其友元类来中转建立关系;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics