课程设计说明书课程名称:软件设计设计题目:院系:计算机科学与信息工程学院学生姓名:学号:专业班级:软件工程11-1指导教师:2014年6月课程设计任务书目录一、系统目标 (1)1. 设计目的 (1)2. 需求描述 (1)二、系统模式选择 (1)1.需求分析 (1)2.选用设计模式 (1)2.1 工厂模式 (2)2.2建造者模式 (2)2.3原型模式 (3)2.4策略模式 (4)三、系统设计 (4)1.系统功能模块设计 (4)2.系统模块类图 (5)3.系统控制函数 (5)四、系统实现 (6)1.工厂模式 (6)2.原型模式 (8)3.建造者模式 (9)4.策略模式 (12)五、系统设计总结 (13)1. 实现的功能和优点 (13)2. 不足之处和改进方向 (14)3. 完成心得 (14)六、参考文献 (14)一、系统目标1.设计目的设计模式的提出,是面向对象程序设计演化过程中一个重要的里程碑,设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。
希望通过本次课程设计,可以更加了解设计模式的概念、设计模式的基本要素、设计模式的原则和设计模式的类型,以及各种设计模式的特点和适用情形,会根据不同的场景去灵活运用各种模式,加深对软件设计课程的理解。
通过运用设计模式来解决实际系统中遇到的问题,巩固所学的理论知识,提高程序设计能力,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
2.需求描述周末的时候大家一般出去玩,然后吃点好的东西,这样,可以分为好几个步骤,首先,选择穿什么样的衣服,然后选择选择什么样的出行方式,最后选择吃什么样的东西。
虽然这是一个很简单的问题,如果能用设计模式的思想将这个简单的问题抽象化,这样会对我们了解设计模式非常有帮助。
本次课程设计选择了“旅游策略”,应用所学到的四种设计模式来解决问题,将设计模式的具体内容与实际的问题相结合,实现系统的相应功能。
系统中总共用到四种设计模式,分别是工厂模式、原型模式、建造者模式和策略模式。
二、系统模式选择1.需求分析工厂模式通过面向对象的方法,将所创建的具体对象的创建工作延迟到了子类,较好的解决了紧耦合的关系,工厂模式用来解决怎么很快的生产出来顾客要求的食品。
原型模式对客户隐藏了具体的产品类,减少了客户知道的名字数目,原型模式用来解决再点一份食品的问题。
建造者模式实现代码和表示代码的分开,主要解决选择什么样的衣服搭配方式,而不必考虑怎么搭配衣服。
策略模式是算法的动态选择,策略模式主要解决了选择什么样的出行方式,而不必关心方式到底有什么变化。
2.选用设计模式根据需求分析,该旅游策略可以采用了四种设计模式,分别是工厂模式、原型模式、策略模式和建造者模式2.1 工厂模式工厂模式是一种创建型设计模式,工厂模式通过面向对象的方法,将所创建的具体对象的创建工作延迟到了子类,较好的解决了紧耦合的关系。
通过定义一个IKFCFactory 接口,产品的创建都是由具体的工厂来完成的,每个工厂只负责一种产品的创建,各个子工厂之间相互独立、职责明确。
模式结构图如图2-1:图2-1 外观模式结构图2.2建造者模式建造者模式是一种创建型设计模式,采用建造者模式的主要原因是它将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
该模式主要解决穿什么分格的衣服。
模式结构图如图2-2:图2-2 建造者模式结构图2.3原型模式原型设计模式是一种创建型设计模式,它关注的是大量相同或相似对象的创建问题,应用原型模式就是先建立一个原型,然后通过对原型进行复制和修饰的方法,来产生和一个原型相同或相似的新对象。
采用原型模式主要是解决点一份相同的食品的问题。
模式结构图如图2-3:图2-3 原型模式结构图2.4策略模式策略模式是一种行为模式,主要体现了算法的动态选择,策略模式可以提供相同行为的不同实现,客户可以根据不同的上下文中的策略方法选中不同的算法。
策略模式主要解决了出行方式的选择,模式结构图如图2-4图2-4 原型模式结构图三、系统设计1.系统功能模块设计a:工厂模式,快速生产消费者点的产品b:原型模式,克隆生产同一种产品。
c:建造者模式,选择不同风格的服饰。
d:策略模式,选择不同的出行方式。
图3-1系统流程图2.系统模块类图图3-2 系统模块类图3.系统控制函数public static void main(String[] args) {Manner a = new MannerA();People r1 =new People(a);r1.choose();System.out.println("他今天心情不错,精心打扮了一下,他挑选了");Builder b1 =new PerformA();r1.construct(b1);Clothes Blue =b1.getClothes();Blue.show();System.out.println("看完了电影,他觉着有点饿,所以想去KFC吃个鸡腿");r1.display();System.out.println(" 他发现实在是太好吃了,并且肚子还饿着,又点了一个");r1.copy();}四、系统实现1.工厂模式外观模式主要包括KFCFood类、Chicken类、Wings类、IKFCFactory接口、ChickenFactory类和WingsFactory类,IKFCFactory常用来创建一个生产具体产品的工厂。
//工厂模式public abstract class KFCFood {public abstract void show();}public class Chicken extends KFCFood implements Cloneable{public void show(){System.out.print("要一个鸡腿");}public Object clone() throws CloneNotSupportedException{ return (Object)super.clone();}public class Wings extends KFCFood implements Cloneable{public void show(){System.out.println("要一个鸡翅");}public Object clone() throws CloneNotSupportedException{ return (Object)super.clone();}public interface IKFCFactory {KFCFood createFood();}public class Chickenfactory implements IKFCFactory{public KFCFood createFood(){return new Chicken();}}public class Wingsfactory implements IKFCFactory{public KFCFood createFood(){return new Wings();}}图4-1工厂模式测试2.原型模式原型模式主要包括Chicken类、Wings类、以及People类,people类中重写clone 方法,下面是主要代码。
public class Chicken extends KFCFood implements Cloneable{public void show(){System.out.print("要一个鸡腿");}public Object clone() throws CloneNotSupportedException{return (Object)super.clone();}public class Wings extends KFCFood implements Cloneable{public void show(){System.out.println("要一个鸡翅");}public Object clone() throws CloneNotSupportedException{return (Object)super.clone();}public class People {private Manner manner;public People(Manner manner){this.manner =manner;}public void copy() throws CloneNotSupportedException{Chicken c1 =new Chicken();Chicken c2 = new Chicken();c2 = (Chicken)c1.clone();c2.show();}}图4-2 原型模式测试3.建造者模式建造者模式主要包括Clothes类、Builder类、PerformA类、PerformB类和指挥者People类,PerfromA和PerformB实现了Builder的抽象方法,People类new出一个Builder对象,通过动态绑定完成相应的操作。
建造者模式主要实现了选择穿什么风格的服饰这一问题。
下面是主要代码:public abstract class Builder {public abstract void addShoes();public abstract void addTshirt();public abstract void addPants();public abstract Clothes getClothes();}public class Clothes {ArrayList list = new ArrayList();public void add(String part){list.add(part);}public void show(){for(int i =0;i<list.size();i++){System.out.println(list.get(i));}}}public class PerformA extends Builder {private Clothes Blue =new Clothes();public void addShoes(){System.out.print("一双白色的运动鞋");}public void addTshirt(){System.out.print("和一件黄色的短袖");}public void addPants(){System.out.print("一条Jeans牌牛仔裤、");}public Clothes getClothes(){return Blue;}}public class PerformB extends Builder{private Clothes red = new Clothes();public void addShoes(){System.out.println("一双白色的皮鞋");}public void addTshirt(){System.out.println("一件白色的衬衫");}public void addPants(){System.out.println("一条红色的裤子");}public Clothes getClothes(){return red;}}Public class{public void construct(Builder builder){builder.addPants();builder.addShoes();builder.addTshirt();}}图4-3 建造者模式测试4.策略模式策略模式主要包括Manner类、MannerA类、MannerB类,MannerA和MannnerB实现了Manner的ConcreteManner类public abstract class Manner {public Manner(){}public abstract void concreteManner();}public class MannerA extends Manner{public MannerA(){}public void concreteManner() {System.out.print("星期天,小明坐公交车去市区玩");}}public class MannerB extends Manner {public MannerB() {}public void concreteManner(){System.out.println("打的去");}}图4-5 策略模式测试五、系统设计总结1.实现的功能和优点该系统主要实现了选择什么样的出行方式,穿什么风格的衣服,饭馆怎么快速的生产所需的产品。