软件系统的设计模式
所谓模式,就是指解决某一类相似问题的方法论。某个模式描述了-一个在我们的日常生活中不断出现的问题,然后描述了该问题的解决方案的核心。在软件系统的设计领域中,也出现了很多设计模式。每种设计模式都包含4个要素,如图所示。
➢模式名称相当于模式的助记符。
➢问题描述了模式的使用场景,即模式可以解决的某种设计问题。
➢解决方案描述了针对特定的设计问题,可以采怎样的设计方法,包括设计的组成成分、各成分的职责和协作方式以及各成分之间的相互关系。
➢效果描述了特定模式的应用对系统灵活性、扩展性、可移植性等各种特性的影响,它对评价设计选择以及对模式的理解非常有益。
目前,比较常用的是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides所提出的23种设计模式,它们分为3种类型,即创建型模式、结构型模式和行为型模式,如图所示。
➢创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。
➢结构型模式:把类或对象结合在一起形成一个更大的结构。
➢行为型模式:类和对象如何交互,及划分责任和算法。
下面用一个图片来整体描述一下设计模式之间的关系:
J2EE 模式:这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)
设计模式的六大原则
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。