当前位置:文档之家› 设计模式课程教学大纲

设计模式课程教学大纲

《设计模式》课程实验教学大纲课程名称:设计模式课程代码:10011210课程学时:64学时(理论32学时,实验32学时)课程学分: 2适用专业:计算机科学与技术(软件工程方向)一、验证性实验【课程教学中验证原理、算法、技术、效果等】实验一:面向对象基础实验(2学时)【实验类型】验证性【实验目的】掌握OOP基本概念,并能运用这些基本概念进行应用设计。

【实验要求】基于JA V A开发环境,综合运用主要的OOP概念,比如类、接口、继承、多态,并将这些概念融合到一个特定的应用场景中。

【实验内容】基于JA V A开发环境设计一个简易的学生信息管理的控制台应用,要求在该实验项目中需要融合使用类、接口、继承、多态等主要OOP概念。

实验二:创建型模式单项实验(建造者模式、原型模式、单例模式)(6学时)【实验类型】设计性【实验目的】1.了解建造者模式、原型模式、单例模式的主要作用2.理解建造者模式、原型模式、单例模式的角色及作用3.掌握利用建造者模式、原型模式、单例模式进行代码设计并绘制相关UML类图4.理解建造者模式、原型模式、单例模式的优点和缺点【实验要求】基于JA V A开发环境,设计案例,体会原型模式的应用方式。

所设计的实验程序要满足以下两点:1)体现原型模式的工作原理;2)符合面向对象的设计原则。

【实验内容】Prototype模式其实就是常说的"虚拟构造函数",其主要思想就是:基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对象的副本。

举一个例子来解释这个模式的作用,假设有一家店铺是配钥匙的,他对外提供配制钥匙的服务(提供Clone 接口函数),你需要配什么钥匙它不知道只是提供这种服务,具体需要配什么钥匙只有到了真正看到钥匙的原型才能配好。

也就是说,需要一个提供这个服务的对象,同时还需要一个原型(Prototype),不然不知道该配什么样的钥匙。

原型模式的UML图如下:原型模式的克隆分为深拷贝和浅拷贝。

至于具体的操作过程应该是在clone函数中实现的,原型模式作为创建型模式中的最特殊的一个模式,具体的创建过程,是由对象本身提供,这样我们在很多的场景下,我们可以很方便的快速的构建新的对象,就像前面分析讲解的几类场景中,可能我们通过使用对象的克隆,比通过其他几类的创建型模式,效果要好的多,而且代价也小很多。

打个比方,原型模式对于系统的扩展,可以做到无缝的扩展,为什么这么说呢?比如其他的创建型工厂,如果新增一个对象类型,那么我们不管是修改配置文件的方式,还是修改代码的形式,无疑我们都是需要进行修改的,对于我们大家通用的公共应用来说这无疑是危险的,那么通过原型模式,则可以解决这样的问题,因为类型本身实现这样的方法即可,但是也有一定的缺点,每个对象都实现这样的方法,无疑是很大的工作量,但是在某些特殊的环境下,或者实际的项目中,可能原型模式是好的选择。

实验三:结构型模式实验(适配器模式、装饰模式、外观模式、代理模式)(9学时)【实验类型】设计性【实验目的】1.了解适配器模式、装饰模式、外观模式、代理模式的主要作用2.理解适配器模式、装饰模式、外观模式、代理模式的角色及作用3.掌握利用适配器模式、装饰模式、外观模式、代理模式进行代码设计并绘制相关UML类图4.理解适配器模式、装饰模式、外观模式、代理模式的优点和缺点【实验要求】基于JA V A开发环境,设计案例,体会装饰模式的应用方式。

所设计的实验程序要满足以下两点:1)体现装饰模式的工作原理;2)符合面向对象的设计原则。

【实验内容】应用开发中通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机。

Decorator提供了"即插即用"的方法,在运行期间决定何时增加何种功能。

应用(适用环境)1) 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

2) 处理那些可以撤销的职责。

3) 当不能采用生成子类的方法进行扩充时,一种情况是,可能有大量独立的扩展,为支持一种组合将产生大量的子类,使得子类数目成爆炸性增长。

另一种情况是可能类定义被隐藏,或类定义不能用于生成子类。

结构在谈及软件中的结构,一般会用UML图表示,下面是Decorator模式的UML结构图:成分:在装饰模式中的各个角色有:抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。

具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。

装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。

具体装饰(Concrete Decorator)角色:负责给构件对象"贴上"附加的责任。

1. Component就是装饰器模式中公共方法的类,在装饰器模式结构图的顶层。

2. ConcreateComponent是转换器模式中具体的被装饰的类,IO包中的媒体流就是此种对象。

3. Decorator装饰器模式中的核心对象,所有具体装饰器对象的父类,完成装饰器的部分职能。

在上面的例子中Decorator类和这里的对应。

该类可以只做一些简单的包裹被装饰的对象,也可以还包含对Component中方法的实现……他有一个鲜明的特点:继承至Component,同时包含一个Component作为其成员变量。

装饰器模式动机中的动态地增加功能是在这里实现的。

4. ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰器对象,他们完成具体的装饰功能。

装饰功能的实现是通过调用被装饰对象对应的方法,加上装饰对象自身的方法。

这是装饰器模式动机中的添加额外功能的关键实验案例设计:通过装饰模式为图书馆的图书与录像带添加"可借阅"装饰"。

实验四:行为模式实验(策略模式、模板方法模式)(5学时)【实验类型】验证性【实验目的】1.了解策略模式、模板方法模式的主要作用2.理解策略模式、模板方法模式的角色及作用3.掌握利用策略模式、模板方法模式进行代码设计并绘制相关UML类图4.理解策略模式、模板方法模式的优点和缺点【实验要求】基于JA V A开发环境,设计一个在线图书销售案例,体会策略设计模式的应用方式。

所设计的实验程序要满足以下两点:1)体现策略模式的工作原理;2)符合面向对象的设计原则。

【实验内容】1、模式定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。

策略模式让算法独立于使用它的客户而独立变化。

2、模式练习:设计一个商店的收银系统,这个商店有普通顾客,会员,超级会员以及金牌会员的区别,针对各个顾客,有不同的打折方式,并且一个顾客每在商店消费1000就增加一个级别,那么我们就可以使用策略模式,因为策略模式描述的就是算法的不同,而且这个算法往往非常繁多,并且可能需要经常性的互相替换。

定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。

模版方法模式的结构模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种:∙抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现。

∙模版方法:由抽象类声明并加以实现。

一般来说,模版方法调用抽象方法来完成主要的逻辑功能,并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。

∙钩子方法:由抽象类声明并加以实现。

但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。

∙抽象类的任务是搭建逻辑的框架,通常由经验丰富的人员编写,因为抽象类的好坏直接决定了程序是否稳定性。

实现类用来实现细节。

抽象类中的模版方法正是通过实现类扩展的方法来完成业务逻辑。

只要实现类中的扩展方法通过了单元测试,在模版方法正确的前提下,整体功能一般不会出现大的错误。

模版方法的优点及适用场景容易扩展:一般来说,抽象类中的模版方法是不易反生改变的部分,而抽象方法是容易反生变化的部分,因此通过增加实现类一般可以很容易实现功能的扩展,符合开闭原则。

便于维护:对于模版方法模式来说,正是由于他们的主要逻辑相同,才使用了模版方法,假如不使用模版方法,任由这些相同的代码散乱的分布在不同的类中,维护起来是非常不方便的。

比较灵活:因为有钩子方法,因此,子类的实现也可以影响父类中主逻辑的运行。

但是,在灵活的同时,由于子类影响到了父类,违反了里氏替换原则,也会给程序带来风险。

这就对抽象类的设计有了更高的要求。

在多个子类拥有相同的方法,并且这些方法逻辑相同时,可以考虑使用模版方法模式。

在程序的主框架相同,细节不同的场合下,也比较适合使用这种模式。

二、综合性实验【课程教学中综合所学内容、项目式等】创建型模模式综合实验(简单工厂模式、工厂方法模式、抽象工厂模式)(10学时) 【实验类型】综合性【实验目的】1.了解简单工厂模式、工厂方法模式、抽象工厂模式的主要作用2.理解简单工厂模式、工厂方法模式、抽象工厂模式的角色及作用3.掌握利用简单工厂模式、工厂方法模式、抽象工厂模式进行代码设计并绘制相关UML类图4.理解简单工厂模式、工厂方法模式、抽象工厂模式的优点和缺点【实验要求】基于JA V A开发环境,设计图形绘制和字符串加密两个控制台应用,体会简单工厂模式的应用方式。

所设计的实验程序要满足以下两点:1)体现简单工厂模式的工作原理;2)符合面向对象的设计原则。

【实验内容】简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式的UML图:简单工厂模式中包含的角色及其相应的职责如下:工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。

当然工厂类必须能够被外界调用,创建所需要的产品对象。

抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

相关主题