大话设计模式总结1----全书概览


 

题记:如果想成为一名优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更加有价值,因为设计的演变过程蕴藏着大智慧。如果你想成为拥有大智慧的软件设计师,那你必须的学习设计模式。

 

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

  

一、设计模式的引子

     武功套路是习武的门径。新手要一招一式地练习套路,烂熟于心之后,熟能生巧,在实战之中即可见招拆招、运用自如——此时习武之人已从“新手”成长为“好手”。“高手”则没有套路,实战之中只有自然反应,然而一招一式浑然天成、恰到好处,似有似无、无中生有。“高手”之上还有“高高手”,他们达到的境界非我等凭借金氏武侠小说可以揣测。

  

    设计模式之于设计,好比套路之于武术。“新手”要一个接一个地学习模式,“好手”能够活用模式,“高手”则没有模式。

  

    设计模式的“内功”是面向对象的基本原则。这些原则是“神”,模式是“形”。高手拼的是“内功”,对面向对象基本原则有了深刻的领悟,才能用好设计模式,避免“走火入魔”。

  

    一般在设计模式著作的前几章都会介绍面向对象的基本原则,这几章非常重要(例如:大话设计模式)。学通了这几章,后面的模式就不过如此了。学完了设计模式,也最好翻过头来重新看看这几章,保证会有新的领悟。


二、为什么使用设计模式

     对任何设计都可以凭主观(对设计很难做出客观评价)判断得出它是一个好的设计,还是一个坏的设计。使用设计模式是为了避免坏的设计。程杰在他的著作《大话设计模式》中描述了优秀的杰作,使用设计模式原则,下面先简单的介绍一下(后面会相关博课详细介绍):

①单一职原则:就一个类而言,应该仅有一个引起它变化的原则。

②开放—封闭原则:对于扩展是开放的,对于更改是封闭的

③里氏代换原则:子类型必须能够替换掉它们的父类型。

④依赖倒转原则:针对接口编程,不要对实现编程

⑤迪米特法则:也叫最少知识原则,强调了类之间的松耦合。

⑥合成/聚合复用原则:在一个新的对象里面使用一些已有的对戏那个,使之成为新对象的一部分,新的对象通过向这些对的委派达到复用已有功能的目的。尽量使用合成/聚合,尽量不要使用继承。

 设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。

 

三、指导设计模式的三个重要概念:



   (1)重用(reuse):是目标

 

       两种重要的重用手段:Inheritance 和 composition

 

  (2)接口与现实分离

 

       接口保持不变,分离带来灵活性。

 

       多态性(polymorphism)

 

  (3)Decouple(解耦)

 

        降低复杂性。



四、使用设计模式的目的

     使用设计模式的目的是为了适应未来的变化,变化之所以存在是因为它的不可预知性——如果可以预知,则不能称其为变化。如何判断哪些需求可能变化,哪些需求可能不变,并且在最大程度上保持设计的干净、简单,这是些工艺问题,而不是工程问题。既然是工艺问题,那么就只能给出原则,不能给出标准。使用设计模式的大体原则可能是:对未来极有可能发生变化的问题给出最简单、修改成本最低的解。



五、避免过度使用设计模式

     易维护的程序首先要易理解,这一点远甚于其他。在易理解的代码上才好维护。过分地使用设计模式会增加程序的复杂性和晦涩性,让程序不易理解,从而降低了程序的易维护性。

     Switch语句曾经遭致诟病,许多重构的例子就是拿Switch开刀。我认为Switch语句是高效的语句,可以写出极优雅、简单的代码。在很多情况下,直接使用Switch语句比把它拆成若干个Class更“干净”。

  

     再比如,有一段四百多行的代码负责整个系统的调度,如果未来的变化仅仅是修改这四百行代码而不会大量添加代码,那么把这四百多行代码集中在一个函数里面,比将它拆分成十来个Class更加容易维护。

 

六、大话设计模式中提到的基本的设计模式(注:在此简单介绍,后面会有详文予以解答)


1.创建型模式

社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

简单工厂模式(SimpleFactory);

工厂方法模式(FactoryMethod);

抽象工厂模式(AbstractFactory);

创建者模式(Builder);

原型模式(Prototype);

单例模式(Singleton)。


2.结构型模式

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

外观模式(Facade);

适配器模式(Adapter);

代理模式(Proxy);

装饰模式(Decorator);

桥模式(Bridge);

组合模式(Composite);

享元模式(Flyweight)。


3.行为型模式

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法模式(TemplateMethod);

观察者模式(Observer);

状态模式(State);

策略模式(Strategy);

职责链模式(Chain ofResponsibility);

命令模式(Command);

访问者模式(Visitor);

调停者模式(Mediator);

备忘录模式(Memento);

迭代器模式(Iterator);

解释器模式(Interpreter)。

 


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值