Download presentation
Presentation is loading. Please wait.
1
第十九讲 设计模式(Design Patterns)
基本概念 基本要素 模式分类 实例
2
设计模式 ——基本概念 在面向对象的编程中,软件编程人员更加注重现有代码的重用性和可维护性。 设计模式使人们可以更加简单方便地重用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 A pattern is an idea that has been useful in one practical context and will probably be useful in others. --Martin Fowler
3
设计模式 一般而言,一个模式有四个基本要素 模式名称(pattern name) 问题(problem) 解决方案(solution)
——基本要素 一般而言,一个模式有四个基本要素 模式名称(pattern name) 问题(problem) 解决方案(solution) 效果(consequences)
4
模式名称(pattern name) 设计模式 ——基本要素
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
5
问题(problem) 设计模式 ——基本要素
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
6
设计模式 解决方案(solution) ——基本要素
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
7
设计模式 效果(consequences) ——基本要素
描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
8
设计模式 ——模式分类 创建型模式 抽象的实例化过程 结构型模式 如何组合类和对象以获得更大的结构 行为型模式 涉及到算法和对象间职责的分配
9
创建型模式 设计模式 Abstract Factory:抽象工厂 Builder:生成器 Factory Method:工厂方法
——模式分类 创建型模式 Abstract Factory:抽象工厂 Builder:生成器 Factory Method:工厂方法 ProtoType:原型 Singleton:单实例
10
结构型模式 设计模式 ——模式分类 MVC :模型-视图-控制器 Adapter:适配器 Bridge:桥接 Composite:组成
Decorator:装饰 Facade:外观 Flyweight:享元 Proxy:代理
11
行为型模式 设计模式 ——模式分类 Chain of Responsibility:责任链 Command:命令
Interpreter:解释器 Iterator:迭代器 Mediator:中介者 Memento:备忘录 Observer:观察者 State:状态 Strategy:策略 Template Method:模板方法 Visotor:访问者
12
设计模式 ——实例:Singleton模式 意图 动机
考虑数据共享和封装,保证一个类仅有一个实例,并在提供各种公共操作的基础上提供一个该实例的全局访问方法。 动机 对于某些系统,有些类里封装了一些公共的、共享的信息,比如日志文件记录器,数据缓冲区等,如果允许这些类有多个实例,那么,很容易造成这些信息的完整性被破坏,或者,由于同步操作,会造成系统的性能降低。因此,对这些类,只允许一个实例存在。
13
设计模式 ——实例:Singleton模式 要想保证一个类只有一个实例,需要做到: 必须能够实例化这个类 必须阻止其它的类来随意实例化这个类
有了这个实例以后,需要提供一个该实例的全局访问方法,这和该实例的保存位置有关。
14
在下列情况下可使用Singleton模式: 当类只能有一个实例且客户可以从一个公共方法访问它时。
设计模式 ——实例:Singleton模式 适用性 在下列情况下可使用Singleton模式: 当类只能有一个实例且客户可以从一个公共方法访问它时。 当这个唯一实例应该是可通过子类继承来扩展的,并且客户应该无需更改代码就能使用一个子类的实例时。
15
设计模式 ——实例:Singleton模式 结构
16
示例二: SingletonTest.java
设计模式 ——实例:Singleton模式 示例一: public class Runtime { private static Runtime currentRuntime = new Runtime(); private Runtime(){//... } public static Runtime getRuntime() { return currentRuntime; ... 示例二: SingletonTest.java
17
设计模式 Singleton模式优点: ——实例:Singleton模式
比静态方法(类操作)更灵活:另一种封装单件功能的方式是使用静态方法。但是,使用静态方法需要考虑同步问题,也容易导致内存数据不一致的问题。
18
设计模式 ——实例:MVC模式 MVC概述 WEB应用的两种开发模式 MVC操作顺序 MVC优点 MVC的适用性
19
设计模式 ——实例:MVC模式 MVC概述 视图 控制器 模型 int value=1
20
MVC概述 设计模式 MVC模式最初使用SmallTalk开发,后来在Swing组件库中广泛应用。
该模式采用一个图形化对象并将其任务分解成三部分: 控制器:触发一个对组件的改变。 模型:提供修改、访问数据的方法。 视图:提供当前数据的直观显示。
21
设计模式 ——实例:MVC模式 JSP + JavaBean
22
Model1的主要特点 设计模式 ——实例:MVC模式 表现层用HTML或JSP。 JSP文件还负责所有的业务和处理逻辑
JSP直接用代码访问数据或JSP通过JavaBean存取数据。 以页面为中心,应用程序的业务逻辑和程序流程都在页面中出现。 JSP要跳转到别的页面,通过超级链接或Form表单的action实现。
23
Model1的缺点 设计模式 ——实例:MVC模式 JSP不仅负责表示逻辑,还负责控制逻辑
大型项目中如果采取此方式,每个开发小组必须了解其它小组开发的所有页面的详细信息,否则对页面的修改将会破坏应用程序的流程。 当输出设备不同时(比如股票信息输出到显示器、手机、PDA上),需要采用不同的输出格式(即不同的视图),那么用此方式JSP不仅要判定设备的类型,而且要为不同类型的设备提供正确的显示格式。
24
JSP + JavaBean +Servlet
设计模式 ——实例:MVC模式 JSP + JavaBean +Servlet
25
MVC模型 设计模式 在一个典型的J2EE Web应用中,MVC设计模式包括三个部分: ——实例:MVC模式
模型(Model): 用于封装数据,一般是关系数据库或EJB。 视图(View): 数据的表现组件,通常就是JSP页面,也可以是GUI,可以有多个。 控制器(Controller): 接受用户动作,负责统一管理。一般是Servlet。
26
MVC模型 设计模式 在一个典型的企业级应用中,经常需要用多种类型的接口来支持多种类型的用户。 比如,一个网上商店可能需要:
为网上顾客提供HTML前端, 为无线用户提供WML前端, 为系统管理员提供JFC/Swing GUI, 为供应商提供基于XML的Web service。
27
MVC模型 设计模式 ——实例:MVC模式 企业信息系统 HTML View WML JFC/Swing XML-based 传统Web用户
无线用户 系统管理员 B2B用户
28
MVC模型:Model 设计模式 Model含有应用程序的功能核心,表示应用程序的状态,它不管View和Controller。
JavaBean就适合作为Model,可以用来设计应用程序的大部分业务逻辑,能与数据库或文件系统进行交互,负责维护应用程序的数据。
29
MVC模型:View 设计模式 ——实例:MVC模式 View把应用程序的数据通过界面展示给用户。
View可以读取Model的数据,但不可修改。 当用户修改Model数据时,会通知View,以便用户看到最新的数据信息。 JSP用于实现此目的,开发者不用知道也不必去关心数据库发生了什么变化或者业务逻辑的详细情况。 注意:JSP中应尽可能少地使用Java代码。
30
MVC模型:Controller 设计模式 ——实例:MVC模式
控制器的作用是处理请求、创建JavaBean或创建供JSP使用的对象。通常,控制器还决定把用户请求转交给哪一个界面组件(View)。 用于对用户的输入进行响应。 它创建Model并提供输入。 Servlet可同时兼有Java和HTML代码,可以接收来自客户端的HTTP请求,根据此请求决定创建哪些必要的JavaBean,并能把Model的数据修改通知View。
31
MVC操作顺序 设计模式 在控制器被用户触发时,它将把变化传达给模型; 模型改变该数据并将新数据推给适当的视图
视图接收新数据并以新的图像或表格形式显示数据。
32
MVC的优点 设计模式 将核心数据的存取、数据表示和控制逻辑三者分离开来,可针对多种用户设计多个视图,以便共享同样的企业数据模型。
Web设计人员可以集中于使用JSP来开发UI表示数据,而代码开发人员可以使用Servlet编写执行任务的代码,这样有利于缩短开发周期。
33
MVC的适用性 设计模式 ——实例:MVC模式 Web页面需要根据用户在运行时提供的信息进行动态定制。 Web站点上的信息需要经常变动。
34
设计模式 ——实例:MVC模式 用MVC模式实现用户登录验证 步骤: 1.需求分析 2.模型选择 3.设计数据库 4.配置数据源
5.编码实现
35
设计模式 ——实例:MVC模式 login.jsp Servlet main.jsp 数据库 JavaBean
Similar presentations