策略模式实验报告.doc
《策略模式实验报告.doc》由会员分享,可在线阅读,更多相关《策略模式实验报告.doc(4页珍藏版)》请在冰豆网上搜索。
《软件开发实践》实验报告
实验一策略模式
一、实验目的:
1.理解策略模式的基本理论
2.掌握策略模式的使用方法
二、实验内容:
1.模式定义:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
2.模式练习:
设一个网上书店,该系统中所有的计算机类图书每本都有10%的折扣,所有的语言类图书每本都有两元的折扣,小说类图书每100元有10元的折扣。
3.
三、实验结果
1.开发环境:
VS.2008
2.主要源代码:
publicabstractclassCharacter
{
WeaponBehaviorweaponBehavior;
publicCharacter(){};
publicabstractvoiddisplay();
publicvoidfight()//委托给行为类
{
weaponBehavior.useWeapon();
}
publicvoidsetWeaponBehavior(WeaponBehaviorwb){
weaponBehavior=wb;
}
}
publicclassKingextendsCharacter
{
publicKing()
{
publicvoiddisplay()
{
System.out.print("King:
");
}
}
publicclassQueenextendsCharacter
{
publicQueen()
{
weaponBehavior=newKnifeBehavior();
}
publicvoiddisplay()
{
System.out.print("Queen:
");
}
}
publicclassKnightextendsCharacter
{
publicKnight()
weaponBehavior=newBowAndArrowBehavior();
}
publicvoiddisplay()
{
System.out.print("Knight:
");
}
}
publicclassTrollextendsCharacter
{
publicTroll()
{
weaponBehavior=newAxeBehavior();/
}
publicvoiddisplay()
{
System.out.print("Troll:
");
}
}
publicinterfaceWeaponBehavior
{
publicvoiduseWeapon();
}
publicclassAxeBehaviorimplementsWeaponBehavior
{
publicvoiduseWeapon()
{
System.out.println("!
(AxeBehavior)");
}
}
publicclassBowAndArrowBehaviorimplementsWeaponBehavior
{
publicvoiduseWeapon()
{
System.out.println("!
(BowAndArrowBehavior)");
}
}
publicclassKnifeBehaviorimplementsWeaponBehavior
{
publicvoiduseWeapon()
{
System.out.println("!
(KnifeBehavior)");
}
}
publicclassSwordBehaviorimplementsWeaponBehavior
{
publicvoiduseWeapon()
{
System.out.println("!
(SwordBehavior)");
}
}
运行结果:
四、心得体会
创建类的实例对象:
通常我们的做法是Aa=newA();实际上模式也可以用来实例化类的对象。
我们之所以提出模式是因为在某些情况下,例如在实例化对象是要初始化的数据太多,或者其他原因比如访问数据库等。
如果把这些东西写进构造函数里会使你的代码看起来就很难看还很容易出错。
这时我们引入了模式:
我们将创建实例的工作与使用实例的工作分开,也就是说,让创建实例所需要的大量初始化工作从的构造函数中分离出去。