设计模式总结

 
#论道:
[GoF](http://baike.baidu.com/link?url=F3X-vJ1I4NItrSBI7mpgoMKYCkrfZAOjGXMfBvgjnXH3Mn_an4iHdaIcYCwOHdts6o0WmnFHxiwdL-K4ARG8Ya)总结的设计模式,23种,种种不同,种种强大。
但是这种偏于抽象的思维精华,理解起来并不简单。其实设计模式不过是术,是势,真正的道则是面向对象思想。  
所以我们很有必要先了解一下面向对象思想,掌握了道,则世界从此不同。


#面向对象 我浅显的总结了一下面向对象思想,把几个重点列出来: ###1、类与类之间的关系:关联、组合、聚合、依赖、泛华(继承、实现) ###2、面向对象编程特点:可扩展、可复用、可维护、灵活性。 ###3、面向对象设计原则 - 单一职能原则 - 开放-封闭原则(面向对象设计的核心所在) - 依赖倒置原则(面向对象设计的标识,如果我们编程的时候是面向对象编码,而不是实现编程,就是面向对象的设计)---使用里氏替换原则来实现依赖倒置 - 迪米特法则(松耦合、信息的隐藏促进了软件的复用) - 合成/聚合复用原则

#OOTV杯超级模式大赛 我采用了[大话设计模式](http://item.jd.com/10079261.html?utm_source=baidu&utm_medium=cpc&utm_campaign=&utm_term=sembaidu_3412763591_11988730_sem2f7417e146d94ea8a3f706067504a2e0)中关于模式的总结,个人觉得很通俗易懂、语气可爱,有助于总览设计模式。
###1、OOTV简介 OOTV的发起人是面向对象先生。 监制、策划有:抽象先生、封装先生、继承女士、多态女士。 评委:请来的是大名鼎鼎的开放封闭先生、OO公司CTO单一职能先生、顶级coder依赖倒置先生和他的妻子里氏替换女士,还有世界最大编程公司的联合创始人合成聚合复用女士和迪米特先生,热烈欢迎。 评判标准:可扩展性,可复用性、可维护性、灵活性。 举行比赛的原因:随之软件不断复杂化,面向对象思想开始被广泛应用。但是有了核心思想之后,我们需要更多的编程技巧来应对复杂局面,随着面向对象编程方式的发展,出现了设计模式、ORM、以及各种工具和框架。软件为何要复杂化呢?其实不是软件的问题,而是需求的问题。面向对象技术的最新进展是设计模式,所以我们非常有必要举行一场这样的比赛。
###2、工厂家族参赛 我们只要真正深入地理解了设计原则,很多设计模式其实就是原则的应用而已,或许在不知不觉中就在使用设计模式了。 简单工厂、工厂方法、抽象工厂是三姐妹,她们一起参加了比赛。最小的简单工厂被开放封闭先生pass了。 接下来的比赛,只剩下二姐和三姐了。
###3、创造型模式组比赛 第一组是创造型的选手: 1号、抽象工厂小姐,她的口号是:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。 2号、建造者小姐,她的口号是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 3号、工厂方法小姐向我们走来,她声称:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。 4号、原型小姐,她长得可真漂亮,不过她的模式也值得关注:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 5号、单例小姐,身材高挑,引人注目,她提倡简洁就是美:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 创建型选手的实力都很强,评委们解释了为何把它们放在一起:创建型模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建型模式在创建了什么,谁创建它,它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性。
###4、内聚和耦合 在第一组选手比赛的时候,面向对象显示提供了一些高屋建瓴的见解。各位评委们都深表认同。下面看一下这些精彩理论: 内聚性藐视的是一个例程内部组成部分之间相互联系的紧密程度。 而耦合性描述的是一个例程与其他例程之间联系的紧密程度。 软件开发的目标应该是创建这样的例程:内部完整,也就是高内聚,而与其他例程之间的联系则是小巧、直接、可见、灵活的,这就是松耦合。
###5、结构型模式比赛 第二组选手闪亮登场: 6号、适配器小姐,根据可靠消息,适配器可是有杀手锏的,她的口号是:将一个类的接口转换为客户希望的另外一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 7号、桥接。桥接小姐据传身世不错,她提倡的是:将抽象部分与它的实现部分分离,使他们都可以独立的变化。 8号、组合小姐。她是家族中最漂亮的姑娘,她的口号是:将对象组合成树形结构以表示“部分—整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 9号、装饰小姐,来自知名化妆品公司的一个普通员工,她的意图是:动态给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。 10号、外观小姐,台下竟然有人喊:“有一美人兮,见之不忘。一日不见兮,思之如狂。”外观小姐显得很羞涩,但她还是说出了自己宣言:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 11号、享元小姐,看起来很干练的女子。她说:为运用共享技术有效地支持大量细粒度的对象。 12号、代理小姐,她的父亲和面向对象先生有很大交情,不过面向对象先生并不避讳这一点,他说他非常欣赏代理小姑娘,希望大家也多关注她,但他表示不会干扰评委们的评判。代理小姐声称:为其他对象提供一种代理以控制对这个对象的访问。 被称为“死亡小组”的结构型模式组引起了人们的热议,评委们把它们放在一起,是因为:他们都描述了如何将类和对象结合在一起形成更大的结构的问题。 毫无疑问,结构型模式小组实力很强,具体结果让我们敬请期待。
###6、行为型模式一组比赛 第三组成为行为型模式: 13号、观察者模式,她的口号是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。 14号、模板方法模式,她提倡:定义一个操作的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 15号、命令小姐,她觉得:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;可以对请求排队或记录请求日志,以及支持可撤销的操作。 16号、状态小姐,她说:运行一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。 17号、职责链小姐,她一直认为:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 行为组的分组规则:对在不同的对象之间划分责任和算法的抽象化。行为模式不仅仅是关于类和对象的,而且是关于它们之间的相互作用的。
###7、行为型模式二组比赛 行为型模式二组: 18号、解释器小姐,她声称:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 19号、中介者小姐,她说她是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使得耦合松散,而且可以独立地改变它们之间的交互。 20号、访问者小姐,她表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 21号、策略,一个可爱的功能,她的意图是:定义一系列的算法,把它们一个个封装起来,并且使它们可喜欢替换。本模式使得算法可独立于使用它的客户而变化。 22号、备忘录小姐,她说:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 23号、迭代器小姐,她说:提供一种方法顺序访问一个聚合对象中各个元素,而不需要暴露对象的内部表示。
###8、宣布结果 面向对象先生出现了,他总结到: 面向对象设计模式体现的就是抽象的思想,类是什么,类是对对象的抽象,抽象类呢,其实就是对类的抽象,那接口呢,说白了就是对行为的抽象。 设计模式大赛决赛入围的有:工厂方法、外观、观察者、策略、适配器。 最后,面向对象打开了评委的信封,念道,“第一届OOTV杯超级设计模式大赛的冠军是…..” 每个人心中都有自己的冠军。
###设计模式先了解到这里,不过这些模式要熟练使用,还需要多加锻炼,也需要时间的磨练,经验的积累。
posted @ 2013-09-13 14:49  轩辕李  阅读(345)  评论(0编辑  收藏  举报