`

设计模式说明

阅读更多
设计模式说明
Produce by Shjy.Nicholas      
E-Mail: shjy.nicholas@gmail.com
Version: 1.0                   
 
说明:
本文是<<设计模式-- 可复用面向对象软件的基础>>,英文名称"Design Patterns -- Elements of Reusable Object-Oriented Software"
一书的复习资料.原书的作者是: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
译者是: 李英军, 马晓星, 蔡敏, 刘建中.
文中所表示的页码也是中文版的页码数.
 
. OMT表示法的简单实例
类名
操作
数据
1.
 
 
 
 


   public class Name {            // Name
为类名
      private String data ;          // data为数据
      public void operation() {}        // operation()为操作
}
 
2.实例化
对象
--->
   Java,就是new操作,此时会使对象内部的数据分配存储空间.
 
3. 继承关系
   public class ParentClass {
      public void sayHello() {
        System.out.println(“Hello in ParentClass”) ;
}
   }
 
   public class SubClass extends ParentClass {
      public void sayHi() {
        System.out.println(“Hi in SubClass”) ;
      }
 
      public static void main(String [] args) {
        SubClass sc = new SubClass() ;
        sc.sayHello() ;
        sc.sayHi() ;
}
   }
 
/**
 * 运行结果:
 * Hello in ParentClass     // 子类继承了父类中的方法SayHello()
* Hi in SubClass
 */
 
 
4. 抽象类与具体类
abstract class AbstractClass {
   public abstract void operation() ;
}
 
class ConcreteSubClass extends AbstractClass {
   public void operation() {
      System.out.println("operation...") ;
   }
}
 
5.混入类
java中不直接支持多继承,可以通过implements多个接口来实现.
interface ExistingInterface {
   void existingOperation() ;
}
 
interface Mixin {
   void mixinOperation() ;
}
 
class AugmentedClass implements ExistingInterface, Mixin {
   public void existingOperation() {
      System.out.println("existingOperation()") ;
   }
  
   public void mixinOperation() {
      System.out.println("mixinOperation()") ;
   }
}
 
 
. 委托
class Rectangle {
   public int width ;
   public int height ;
  
   public int area(){
      return width * height ;
   }
}
 
class Window {
   Rectangle rectangle = new Rectangle() ;
  
   public int area() {
      return rectangle.area() ;
   }
}
 
. Lexi说明.
1. 设计中涉及到7种设计模式,分别是Abstract Factory, Composite, Strategy, Decorator, Bridge, Command, Iterator.
 
2. 设计问题:
u      文档结构:Lexi的用户可以直接操纵行,,图形,表等子结构.
使用到的模式: 组合模式.
u      格式化:将一个图元集合分解为若干行.
格式化不同于表示,Lexi必须将文本分解成行,将行分解成列等操作,同时还要满足用户的高层次要求,:指定边界宽度,缩进大小和表格形式,是否隔行显示以及其他可能的许多格式限制条件.
使用的模式: 策略模式.
u      修饰用户界面:
支持两种修饰:
n        在文本编辑区域周围加边界以界定文本页.
n        加滚动条.
   使用的模式: 装饰模式.
u      支持多种视感标准:支持多种视感标准,以满足平台移植的要求.
使用模式: 抽象工厂.
u      支持多种窗口系统:解决移植中的窗口环境.
使用模式: 桥接模式.
u      用户操作: 通过文档的WYSIWYG(所见即所得)得到,并支持撤销和重做功能,以及命令历史记录.
使用得模式: 命令模式.
u      拼写检查和连字符:
1.访问以图元形式存在的,分散在文档结构中的信息.
2.分析这些信息
使用的模式:迭代器模式.
. 重要模式的说明:

1. Abstract Factory
抽象工厂模式
   
   抽象工厂模式涉及到以下角色:
u      抽象工厂角色: 担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的.
u      具体工厂角色: 这个角色直接在客户端的调用下创建产品的实例.
u      抽象产品角色: 担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口.
u      具体产品角色: 抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例.

在书P58页的结构图中,
抽象工厂角色:AbstractFactory
具体工厂角色:ConcreteFactory1, ConcreteFactory2
抽象产品角色:AbstractProductA, AbstractProductB
具体产品角色:ProductA1, ProductA2, ProductB1, ProductB2
 
2. Builder 生成器模式

Builder
涉及到的角色: (括号内为所举例子中所对应的类名)
u      抽象创造者(Builder)
u      具体创造者(ConcreteBuilder)
u      导演者(Director)
u      产品(Product)

举例说明:
abstract public class Builder {
public abstract void buildPart1();
public abstract void buildPart2();
 
public abstract Product retrieveResult();
}
 
public class ConcreteBuilder extends Builder {
private Product product = new Product() ;
 
public void buildPart1() {
   product.setPart1(“Part1 be build”) ;
}
 
public void buildPart2() {
   product.setPart2(“Part2 be build”) ;
}
 
public Product retrieveResult(){
      return product;
}
}
 
public class Director {
private Builder builder;
 
public Director(Builder builder) {
this.builder = builder;
}
 
public Product construct()
builder.buildPart1();
builder.buildPart2();
return builder.retrieveResult();
}
}
 
public class Product {
   private String part1 = null ;
   private String part2 = null ;
 
public Product() {}
 
   public void setPart1(String part1){
      this.part1 = part1 ;
   }
 
   public String getPart1() {
      return this.part1 ;
   }
 
   public void setPart2(String part2){
      this.part2 = part2 ;
   }
 
   public String getPart2() {
      return this.part2 ;
   }
  
   public String toString(){
      System.out.println(“part1: ” + this.getPart1()) ;
      System.out.println(“part2: ” + this.getPart2()) ;
   }
}
 
public class Client {
private Director director = null ;
   private Builder builder = null ;
 
public void doBuild() {
      director = new Director(new ConcreteBuilder());
      System.out.println(director. construct()) ;
}
}
 
 
3. Composite合成模式

涉及到的角色:
u      抽象构件(Component)
u      树叶构件(Leaf)
u      树枝构件(Conmposite)
 
举例:
public interface Component {
Composite getComposite();
 
void sampleOperation();
}
 
public class Leaf implements Component {
public Composite getComposite(){
return null;
}
 
public void sampleOperation(){
System.out.println("leaf say hello") ;
}
}
 
 
import java.util.Vector;
import java.util.Enumeration;
 
public class Composite implements Component{
   private Vector componentVector = new java.util.Vector();
 
public Composite getComposite(){
return this;
}
 
public void add(Component component){
componentVector.addElement(component);
}
 
public void remove(Component component){
componentVector.removeElement(component);
}
 
public Enumeration components(){
return componentVector.elements();
}
 
   public void sampleOperation(){
Enumeration enumeration = components();
while (enumeration.hasMoreElements()){
((Component)enumeration.nextElement())
.sampleOperation();
}
}
}
 
 
4Strategy策略模式

对应于P209的结构图,

public class Context{
   private Strategy strategy;
 
   public Strategy setStrategy(Strategy strategy) {
      this.strategy = strategy ;
   }
  
public void contextInterface(){
this.strategy.strategyInterface();
}
}
 
 
abstract public class Strategy{
public abstract void algorithmInterface();
}
 
public class ConcreteStrategyA extends Strategy{
public void algorithmInterface(){
System.out.println("A") ;
}
}
 
public class ConcreteStrategyB extends Strategy{
public void algorithmInterface(){
System.out.println("B") ;
}
}
 
public class ConcreteStrategyC extends Strategy{
public void algorithmInterface(){
System.out.println("C") ;
}
}
 
 
5.Decorator装饰模式

基于P116的结构图,有如下代码:

public interface Component{
   void operation();
}
 
public class ConcreteComponent implements Component{
    public void operation(){
      // 给对象添加一些指责
   }
}
 
public class Decorator implements Component{
   private Component component = null ;
  
   public Decorator(Component component){
      this.component = component;
   }
 
public void operation(){
      component.operation();
   }
}
 
public class ConcreteDecorator extends Decorator{
    public void operation(){
      super.operation();
// 调用Component对象的operation方法,来给组件添加指责
   }
}
 
6.Bridge桥接模式

基于P101的结构图:

abstract public class Abstraction{
   private Implementor imp;
  
   public void operation(){
      imp.operationImp();
   }
}
 
public class RefinedAbstraction extends Abstraction{
   public void operation() {
      super.operation() ;
      // 可以增加进一步的处理
   }
}
 
abstract public class Implementor{
   public abstract void operationImp();
}
 
public class ConcreteImplementorA extends Implementor{
   public void operationImp(){
      System.out.println(
"Do something in ConcreteImplementorA ...");
   }
}
 
public class ConcreteImplementorB extends Implementor{
   public void operationImp() {
      System.out.println(
"Do something in ConcreteImplementorB ...");
   }
}
 
 
7.Command
分享到:
评论
1 楼 shjy.nicholas 2007-08-22  
这是我辛苦总结的,希望对大家有点用处。

相关推荐

    设计模式说明文档.docx

    ### 设计模式说明文档知识点详述 #### 一、设计模式概述 - **产生背景**: - **起源**:设计模式的概念最早来源于建筑领域,由克里斯托夫·亚历山大在其著作中提出,旨在解决建筑设计中的常见问题。 - **软件...

    23种设计模式说明和代码模板

    根据给定文件提供的内容,我们将详细说明23种设计模式中的一些知识点,特别针对单例模式进行深入探讨。 首先,单例模式(Singleton Pattern)是设计模式中最简单的一种。它确保一个类只有一个实例,并提供一个全局...

    Java设计模式(关于Java的设计模式说明)

    工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。

    设计模式之蝉

    Java语言的使用则说明了这本书所涉猎的设计模式是与Java开发紧密相关的内容。 根据提供的信息,这本书的第二版由机械工业出版社出版,于2014年发行,ISBN号为978-7-111-43787-1。书中包含了作者的个人读书笔记,这...

    常见设计模式举例说明

    常见设计模式举例说明 设计模式是软件开发中的一种解决方案,它可以帮助开发者更好地解决软件设计中的问题。这里,我们将对 9 种常见的设计模式进行详细的解释和举例说明。 创建型模式 创建型模式是将对象的创建...

    Head First设计模式.pdf

    全书用两章篇幅对设计模式和GRASP作了基本介绍,3种设计模式的讲解:对于每一种模式,先给出定义,接着通过类比方式用一个现实世界中的例子说明模式的应用,然后分别以C#和Java代码例述模式的架构实现。最后一章给出...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    软件设计模式实验

    在实验报告中,我们需要说明使用Visio或Rose画UML图的心得体会,并分析总结各个创建型设计模式的特点和适用场合。例如,我们可以通过比较简单工厂模式和工厂方法模式,了解两者的区别和适用场合。又如,我们可以通过...

    c++设计模式全系列+应用场景+实例说明

    1. **工厂模式(Factory Pattern)**:工厂模式是一种创建型设计模式,用于创建对象而无需指定创建对象的具体类。包括简单工厂模式、工厂方法模式和抽象工厂模式。 2. **单例模式(Singleton Pattern)**:单例模式...

    java版本的设计模式的实现demo

    以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建;结构型模式关注类或对象的组合;行为型模式则关注类或...

    java设计模式pdf

    ### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...

    设计模式课程设计---使用6个不同的设计模式完成绘图系统(java)

    运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...

    C设计模式_程序设计.rar C设计模式_程序设计.rar

    《C设计模式_程序设计》是一本专注于C语言设计模式的资源集合,它包含了多种设计模式的详细解析和实例应用,旨在帮助程序员提升代码的可读性、可维护性和复用性。设计模式是软件工程中经过实践证明的、解决常见问题...

    软件设计模式综合实验(课程设计)源码

    3.仿照教材上面围棋软件的设计思路,设计一款五子棋,采用至少5种设计模式。 说明: (1)实验报告中把设计的思路说清楚,给出你所采用的设计模式的原始类图。 (2)对于你系统中使用了设计模式的模块绘制其类图,...

    Java设计模式 pdf 示例代码 刘伟

    这是我见过的最好的设计模式讲解资料。为什么这么说呢?因为它不像其他的书籍那样,只讲解原理,还把每个设计模式的由来动机也讲解得很详细。它的讲解思路为:模式动机-&gt;模式定义-&gt;模式结构-&gt;模式分析(即原理)-&gt;...

    设计模式期末大作业 ToFu

    以下是每个设计模式的详细说明: 1. **建造者模式(Builder Pattern)** 建造者模式是一种创建型设计模式,它将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。在这个豆腐商店中,可能用...

    设计模式简要说明

    ### 设计模式简要说明 #### 一、设计模式概览 设计模式是软件工程领域的一个重要概念,指的是在特定情况下解决软件设计问题的一种最佳实践。这些模式是开发者们通过多年的经验积累提炼出来的,旨在提高代码的...

    设计模式书记pdf

    根据提供的文件信息,“设计模式书记pdf”是一本详细介绍多种设计模式的书籍,旨在通过形象有趣、生动活泼的方式帮助读者理解和掌握这些模式。接下来,我们将基于这个背景信息来展开相关的知识点。 ### 设计模式...

    设计模式源码.zip

    最后,"设计模式——基于C#的工程化实现及扩展_示例说明.txt"文件提供了对源码的解释和应用场景的描述,这对于初学者来说是极其宝贵的资源。它可以帮助你理解每个模式的意图、适用场景以及如何在C#代码中正确地引入...

Global site tag (gtag.js) - Google Analytics