设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
设计模式原则:
为什么要提倡"Design Pattern"呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?OO界有前辈的几个原则:"开-闭"原则(Open Closed Principal)、里氏代换原则、合成复用原则。设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
开-闭原则:
开闭原则是由"Bertrand Meyer"提出的。原文是:"Software entities should be open for extension,but closed for modification"。就是说模块应对扩展开放,而对修改关闭。模块应尽量在不修改“原来的代码”的情况下进行扩展。
里氏代换原则:
里氏代换原则是由"Barbara Liskov"提出的。如果调用的是父类的话,那么换成子类也完全可以运行。里氏代换原则是继承复用的一个基础。
合成复用原则:
合成复用原则 就是说要少用继承,多用合成关系来实现。比如,写一个数据库操作类,每一个使用数据库的类都继承这个数据库操作类,当修改这个数据库操作类的一个方法的时候,每一个继承的类都要修改,牵一发而动全身。面向对象就是要把这种波动限制在尽量小的范围,尽量少改动代码,或者不该动原来的代码。
在Java中,应尽量针对Interface编程,而非实现类。这样,更换子类不会影响调用它方法的代码。要让各个类尽可能少的跟别人联系,"不要和陌生人说话"。这样,城门失火,才不至于殃及池鱼。扩展性和维护性才能提高。
依赖倒换原则:
要针对接口编程,而不是针对实现编程。
抽象不应该依赖于细节,细节应当依赖于抽象。
传递参数,或者在组合聚合关系中,尽量引用层次高的类。
主要是在构造对象时可以动态的创建各种具体对象,当然如果一些具体类比较稳定,就不必在弄个抽象类做它的父类,这样有画蛇添足的感觉。
接口隔离原则:
定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
迪米特法原则:
最少知识原则。不要和陌生人说话。
抽象类:
抽象类不会有实例,一般作为父类为子类继承,一般包含这个系的共同属性和方法。
注意:好的继承关系中,只有叶节点是具体类,其他节点应该都是抽象类,也就是说具体类是不被继承的。将尽可能多的共同代码放到抽象类中。
设计模式的四个基本要素:
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
模式名称(pattern name)
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
问题(problem)
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
解决方案(solution)
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
效果(consequences)
描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
------------------------------------------------------------------------------------------------------------
设计模式:
1、 策略模式【STRATEGY PATTERN 】
2、代理模式【PROXY PATTERN 】
3、单例模式【SINGLETON PATTERN 】
4、多例模式【MULTITION PATTERN 】
5、工厂方法模式【FACTORY METHOD PATTERN 】
6、 抽象工厂模式【ABSTRACT FACTORY PATTERN 】
7、门面模式【FACADE PATTERN 】
8、适配器模式【ADAPTER PATTERN 】
9、模板方法模式【TEMPLATE METHOD PATTERN 】
10、 建造者模式【BUILDER PATTERN 】
11、桥梁模式【BRIDGE PATTERN 】
12、命令模式【COMMAND PATTERN 】
13、装饰模式【DECORATOR PATTERN 】
14、迭代器模式【ITERATOR PATTERN 】
15、组合模式【COMPOSITE PATTERN 】
16、观察者模式【OBSERVER PATTERN 】
17、责任链模式【CHAIN OF RESPONSIBILITY PATTERN 】
18、访问者模式【VISITOR PATTERN 】
19、状态模式【STATE PATTERN 】
20、原型模式【PROTOTYPE PATTERN 】
21、 中介者模式【MEDIATOR PATTERN 】
22、解释器模式【INTERPRETER PATTERN 】
23、亨元模式【FLYWEIGHT PATTERN 】
24、备忘录模式【MEMENTO PATTERN 】