首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计形式

2012-08-24 
java设计模式一、什么是软件设计模式?设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经

java设计模式

一、什么是软件设计模式?

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

?

二、设计模式和框架

可复用面向对象软件系统现在一般划分为两大类:应用程序工具箱和框架(Framework),我们平时开发的具体软件都是应用程序,Java的API属于工具箱;而框架是构成一类特定软件可复用设计的一组相互协作的类,EJB(EnterpriseJavaBeans)是Java应用于企业计算的框架。  

框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式。  

设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构,我们一般开发者如果突然接触EJBJ2EE等框架,会觉得特别难学,难掌握,那么转而先掌握设计模式,无疑是给了你剖析EJB或J2EE系统的一把利器。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

模式名称(pattern name)  一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。

?

问题(problem)  描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。

?

解决方案(solution)  描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。

?

效果(consequences)  描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。

?

三、设计模式的原则是什么?

1、合成复用原则 : 

 就是说要少用继承,多用合成关系来实现。

? ? ?2、依赖倒转原则 :  

抽象不应该依赖于细节,细节应当依赖于抽象。

? ? ?3、接口隔离原则  

定制服务的例子,每一个接口应该是一种角色。

? ? ?4、迪米特法则  

最少知识原则。

四、设计模式总体分类

?1、创建型模式

包括:工厂方法、抽象工厂、建造者模式、单例模式、原型模式;

?

? ? ?2、结构型模式

包括:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式;

? ? ?3、行为型模式

包括:责任模式、命令模式、解释器模式、迭代模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式。

五、举例说明:抽象工厂、适配器模式、命令模式

?

?1、抽象工厂:提供一个创建系列相关或者依赖对象的接口,无需指定具体的类的一种模式。

抽象工厂的参与者:AbstractFactory:声明一个创建抽象产品对象的操作接口

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ConcreateFactory:为一类产品对象声明一个接口;

? ?AbstractProduct:为一类产品声明的一个接口

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ConcreateProduct:定义一个将被相应的具体的工厂常见的产品对象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Client:仅适用由AbstractFactory和?AbstractProduct类声明的接口

? ??举例:

? ? AbstractFactory接口:

?

public class ReceiverTest{               public static void main(String []args)               {                             Receiver receiver = new Receiver();                             Commandcommand=newConcreateCommand(receiver);                             Invoker invoker  = new Invoker();                             invoker.setCommand(command);                             invoker.execute();                }}

?

以上便是我最近学习软件设计模式的部分记录....

参考资料:疯狂java联盟总版主杨恩熊的《java设计模式》

热点排行