设计模式

来源:互联网 发布:网络售卖病假条 编辑:程序博客网 时间:2024/06/05 19:52

What is the design pattern什么是设计模式?设计模式最开始的运用是在建筑学上面的,俗话说万丈高楼平地起,再好的建筑也是人们一点一滴的建造起来的,而一个好的建筑和设计模式更是息息相关。我们的软件也需要设计模式,所谓的软件设计模式在我里面看来无非就是java面向对象的封装,继承,多态的反复引用。每一个设计模式,都描述了一个在我们生活中不断发生的问题,以及解决问题的核心方案,这样我们以后再面对软件设计问题的时候就可以一遍一遍的使用该方案,而不用重新去设计。

现在软件行业发展到了现在,已经衍生了23种设计模式和三种类型;

  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
而一个模式又具有其四个要素:

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

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

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

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

好了,上面我们知道了,设计模式的产生原因和设计模式,以及设计模式的要素,接下来要了解一下怎么样去描述一个设计模式。

通常我们用的最多的就是uml建模工具画图了,图形符号虽然很重要,但是远远不够,它们只是将设计过程的结果简单的记录为类和对象的关系。为了达到设计复用,我们必须同时记录设计产生的决定过程,选择过程和权衡过程。具体的例子也是很重要的,它们会让你看到实际的设计。

我们将用统一的格式描述设计模式,每一个设计模式根据以下的模板被分成若干部门。模板具有统一的信息描述结构,有助于你更容易地学习,比较和使用设计模式。

模式名和分类:模式名简洁的描述了模式的本质,模式的分类有助于我们更好去理解模式所处理的具体任务。

意图:我们用这个设计模式是做什么的啦,它产生的动机是什么,它解决的是什么样的特定设计问题。

别名:模式的其他名称。

适用性:什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计,你怎么样去识别这样的情况。

结构:采用基于对象的建模技术(OMT)的表示法对模式中的类进行图形描述。也使用了交互图来说明对象之间的请求序列和协作关系。

参与者:指设计模式中的类和对象以及他们各自的职责。

效果:模式怎样支持它的目标?简单的来说就是我使用这个设计模式,会得到怎么样的效果,是不是符合预期的标准。

实现:实现模式时需要知道的一些提示,技术要点以及应避免的缺陷,以及是否存在某些特定于实现语言的问题,比如使用java和c++的区别。

代码示例:用一种语言,来说明实现这个设计模式的具体代码;

已知应用:实际系统中发现的模式的例子。每个模式至少包括了两个不同的领域的实例。

相关模式:于这个模式密切相关的模式,每一个模式在实际的开发中有可能会于其他模式相关,或者两个模式的相似性很高,我们可以从中选择其中一个。

以上方法可以帮助我们更好的去学习设计模式,在接下来的时间里,我会去解析设计模式,并给它运用到案例中。以便自己更好的理解java面向对象和设计模式,希望有一天能创造出属于自己的东西.

面向对象设计的原则:

1.类继承与接口继承,要优先选择接口继承;一个对象的类定义一个对象是怎么样实现的,同时也定义了一个对象的内部状态和操作的实现。但是对象的类型与他的接口有关,

一个对象我们可以用多种类型去表示,比如现在生活中我们去描述人这个对象,可以用class类去描述,也可以用抽象类去描述,也可以用枚举去描述。同时多个类型也可以是同一个对象。当然类和类型是密切相关的。因为一个类定义了我们所能对其进行的操作和他的类型。当我们说一个对象是一个类的实例时,既该对象实现了该类的所有定义的接口;在我们进行面向对象设计的时候一定要优先选择接口继承,因为如果选择一个类继承的话,那么其子类在实例化的时候有可能会调用父类的方法,影响了其良好的封装性,

而且不利于扩展。

2.运用复用机制;既我们在设计的时候要多使用组合类,即使用到了继承也要去继承他的抽象类,这样的好处就是更加抽象,它们之间的耦合度会降低。使用组合还有另外一个好处就是,有助于你保持每个类被封装,并且集中在单个任务上,另一方面,基于组合可以组成更多的对象,而实现较少的类(class)。


0 0
原创粉丝点击