第14章UML与设计模式
第14章 UML与设计模式
1.为什么要使用设计模式 要真正掌握软件设计,必须研究软件设计大师的成功设计,这些设计中 包含了许多设计模式 定义:一个设计模式是对某特定环境下的某类问题 的解决方法。 使用设计模式的好处: >简化并加快设计。可使用现成的模板,节省开发时间,有助于提高 软件质量。 >方便设计者之间的通信。可更准确地描述问题以及解决问题的解 决方案,使解决方案具有一致性,使代码更易理解。 降低风险。设计模式已被使用,证明是有效的解决方案。 >有助于转到OO技术。设计模式是可重用的设计的经验的总结,在 实际中得到成功应用,成功能够说服开发人员采用新技术
1. 为什么要使用设计模式 要真正掌握软件设计,必须研究软件设计大师的成功设计,这些设计中 包含了许多设计模式。 定义:一个设计模式是对某特定环境下的某类问题 的解决方法。 使用设计模式的好处: ➢ 简化并加快设计。可使用现成的模板,节省开发时间,有助于提高 软件质量。 ➢ 方便设计者之间的通信。可更准确地描述问题以及解决问题的解 决方案,使解决方案具有一致性,使代码更易理解。 ➢ 降低风险。设计模式已被使用,证明是有效的解决方案。 ➢ 有助于转到OO技术。设计模式是可重用的设计的经验的总结,在 实际中得到成功应用,成功能够说服开发人员采用新技术
2.设计模式的历史 提出:70年代后期,一位建筑学教授(克里斯托夫亚力山大, 伯克利大学),《模式语言》讨论设计模式建筑设计中的作用。 软件中使用:80年代,有意识地使用,计算机界流行 总结:80年代后期, Erich Gamma的博士论文对模式进行了分 类整理。 领域:1995年,GoF合著了〈 Design Patter: Elements of Obⅰect- Oriented Software〉,设计模式成为了软件工程的重要研 究领域。 GoF: Erich Gamma, Richard Helm, Ralph Johson, John vlissides
2. 设计模式的历史 提出: 70年代后期,一位建筑学教授(克里斯托夫.亚力山大, 伯克利大学),《模式语言》讨论设计模式建筑设计中的作用。 软件中使用:80年代,有意识地使用,计算机界流行。 总结:80年代后期,Erich Gamma的博士论文对模式进行了分 类整理。 领域:1995年,GoF合著了〈Design Patterns: Elements of Object-Oriented Software〉,设计模式成为了软件工程的重要研 究领域。 GoF:Erich Gamma, Richard Helm, Ralph Johson, John Vlissides
3.设计模式的分类 GoF书中有23个设计模式,见表-1。 目的 创建型 结构型 行为型 类|Fact 创建型 oter 抽象了创建对象的过 主要 行为型: Abs系统中是如何创建、pte象主要描述算法和对象间的职 程,使得系统不依赖 责分配,主要考虑对象(或 范 组合和表示的。 ig桥接类)之间的通信模式 对 Builder生成器 Composite组成 Prototype原型 Decorator装饰 Iterate迭代器 Singleton单件 Facade刻面 Mediator中介者 象 Flyweight!元 Memento备忘录 Proxy代理 Observer观察者 State状态 Strategy策略 Visitor访问者
3. 设计模式的分类 GoF书中有23个设计模式,见表-1。 目的 创建型 结构型 行为型 范 围 类 Factory Method工厂方 法 Adapter适配器 Interpreter解释器 Template Method模板方法 对 象 Abstract Factory抽象工 厂 Builder生成器 Prototype原型 Singleton单件 Adapter适配器 Bridge桥接 Composite组成 Decorator装饰 Façade刻面 Flyweight享元 Proxy代理 Chain of Responsibility职 责链 Command命令 Iterateor迭代器 Mediator中介者 Memento备忘录 Observer观察者 State状态 Strategy策略 Visitor访问者 创建型: 抽象了创建对象的过 程,使得系统不依赖 系统中是如何创建、 组合和表示的。 结构型: 主要描述如何组合类和对 象以获得更大的结构。 行为型: 主要描述算法和对象间的职 责分配,主要考虑对象(或 类)之间的通信模式
4.设计模式实例 1) Facade设计模式(属于对象结构型模式) 该模式定义一个高层接口,为子系统的一组接口提供一个 致的界面,以降低系统中各部分之间的相互依赖关系 Client类 Facade 子系统
4. 设计模式实例 1)Façade设计模式(属于对象结构型模式) 该模式定义一个高层接口,为子系统的一组接口提供一个一 致的界面,以降低系统中各部分之间的相互依赖关系。 Q R S I J K L X Y Z Facade A B C D Client类 子系统
4.设计模式实例 1) Facade设计模式(属于对象结构型模式) 该模式定义一个高层接口,为子系统的一组接口提供一个 致的界面,以降低系统中各部分之间的相互依赖关系 Client Clienta Client Clienta Connection Database Recordset DatabaseMetadata Statement DatabaseMetadat. Connection Statement Resultsetmetadata Resultsetmetadata 获得更大的结构
4. 设计模式实例 1)Façade设计模式(属于对象结构型模式) 该模式定义一个高层接口,为子系统的一组接口提供一个一 致的界面,以降低系统中各部分之间的相互依赖关系。 ClientA ClientB Connection DatabaseMetadata Statement ResultSetMetadata ResultSet Database Recordset ClientA_ ClientB_ DatabaseMetadata_ ResultSetMetadata_ Connection_ Statement_ ResultSet_ 获得更大的结构
4.设计模式实例 对于简单数据库应用, Database、 Recordset的功能简单,如连接数据库、执行查询即可。 public class Database i private Connection con public database(String driver).) public void Open(String url, String uid, String pwd)i public void Close({…} public Recordset SelectQuery( String sql.) public int Update Query (String sql.3 public class recordset i private Resultset rs private Database db public recordsetResult Set rs).j public void Open( String sql, Database db). public void Closet public int Move First& public String GetField Value( String fieldname) public String GetField Value (int fieldindex)
4. 设计模式实例 对于简单数据库应用,Database、Recordset的功能简单,如连接数据库、执行查询即可。 public class Database { private Connection con; public Database(String driver){...} public void Open(String url,String uid,String pwd){...} public void Close(){...} public Recordset SelectQuery(String sql){...} public int UpdateQuery(String sql){...} } public class Recordset { private ResultSet rs; private Database db; public Recordset(ResultSet rs){...} public void Open(String sql,Database db){...} public void Close(){...} public int MoveFirst(){..} ... public String GetFieldValue(String fieldname){..} public String GetFieldValue(int fieldindex){..} ... }
4.设计模式实例 Facade设计模式应用范围: 为复杂的子系统提供一个简单的接口; >客户类和客户类要使用的类之间存在太多的依赖 关系; 要建立具有层次结构的子系统
4. 设计模式实例 Facade设计模式应用范围: ➢ 为复杂的子系统提供一个简单的接口; ➢ 客户类和客户类要使用的类之间存在太多的依赖 关系; ➢ 要建立具有层次结构的子系统
4.设计模式实例 2) Abstract Factory设计模式(属于对象创建型模式) 该模式的目的是给用户程序提供一个创建一系列相关或相互 依赖的对象的接口,不需要在客户程序中指定要具体使用哪个 类。(可在运行时由用户确定) 工厂生产产品,将对象看作产品,类产生对象,类是产生对 象产品的工厂,叫做类工厂。 在Java语言中支持一个程序的图形界面元素具有多种显示形 式,或是 Metal,或是 Motif,或是 Windows风格,并且可由用户 配置使用什么样的风格
4. 设计模式实例 2)Abstract Factory设计模式(属于对象创建型模式) 该模式的目的是给用户程序提供一个创建一系列相关或相互 依赖的对象的接口,不需要在客户程序中指定要具体使用哪个 类。(可在运行时由用户确定) 工厂生产产品,将对象看作产品,类产生对象,类是产生对 象产品的工厂,叫做类工厂。 在Java语言中支持一个程序的图形界面元素具有多种显示形 式,或是Metal,或是Motif,或是Windows风格,并且可由用户 配置使用什么样的风格
4.设计模式实例 2) Abstract Factory设计模式(属于对象创建型模式) CidgetFactory ◆ createscrolbar ◆ createindor0 每一种元素类型均有 客户通过该抽象类(抽 个抽象类 象工厂)接口来产生界 面元素,每一种元素对 应一个操作。 Windows WidgetFactory Windows Window Motifwindow se一个界面元素,有不同 MotifwidgetFactory Windows ScrollBar 的具体风格类 MotifScrollBar 对界面元素的产生,不同风 格有不同的产生工厂
4. 设计模式实例 2)Abstract Factory设计模式(属于对象创建型模式) 客户通过该抽象类(抽 象工厂)接口来产生界 面元素,每一种元素对 应一个操作。 对界面元素的产生,不同风 格有不同的产生工厂。 每一种元素类型均有一 个抽象类。 一个界面元素,有不同 的具体风格类