吉林大学设计模式第一次作业

找到这里的多半是我的学弟学妹了,怎么说呢,希望能帮到你们吧,也更希望我留在这里的思路和代码是你们的下限,设计模式真的很精妙,祝你们有所增益。

写在开头

我在八周之前开始学这门课的时候看大黑书,觉得大黑书写的晦涩枯燥根本理解不了,老师讲了之后做作业也根本没思路没想法,然后上网找答案,结果网上答案也写得参差不齐,最难受的就是自己看不懂也不知道对不对,感觉自己陷入了一个恶性循环,很浮躁。后来机缘巧合看了程杰的《大话设计模式》,写的很有趣很生动,开始有了求知欲,我也不知道我能不能坚持,试试吧,程序狗肯定还是要回归敲代码啦。


题目1

小王为某管理信息系统的用户管理模块设计了如图所示接口。

吉林大学设计模式第一次作业
我们老师给的答案:
吉林大学设计模式第一次作业

老师给的参考答案:

吉林大学设计模式第一次作业

老师给的参考答案:

吉林大学设计模式第一次作业

题目4

给出适当的类设计和相应的代码:
有一个只能放进不能取出的盒子, 最多可放8个水果, 不一定一天放入。
水果只是苹果和桔子两种, 它们放入盒子前的原始重量分别为50和30。
放入盒子后, 由于丢失水分, 它们的重量减轻, 苹果和桔子每天分别减轻4和3, 直到达到各自原始重量的3/5后, 不再减轻重量。
盒子的功能有: 输出盒子中苹果的数量; 输出盒子中桔子的数量; 输出一天来盒子中水果减轻的总重量; 输出当前水果的总重量。

首先分析这个案例,万事万物先抽象——

  • 盒子里放水果,水果会缩水,盒子需要告诉主人内部的水果情况

继续分析:
盒子只有一个,目前已知的水果种类是苹果和橘子,但每一个实例化的苹果和橘子会因为呆在盒子中的天数不同属性(水分)也变得不同。
那么仔细想想苹果和橘子的联系,他们的公共部分都放到虚基父类Fruit里,然后多态实现的时候各自覆盖父类方法,他们的公共部分有:

  • 属性:初始状态重量int mMaxWeight、终止状态重量int mMinWeight、已经损失的重量int mLoseWeight、当前的重量int mWeight;
  • 方法:减重 virtual int ReduceWeight( );

而关于8个水果限制的解决办法:可以把实例化的每个苹果放入LIst容器,放入时检查List.size()是否到达8的限制,同时盒子也可以从这个容器里去遍历求重量。

class Fruit{public:    Fruit(int mMax =0,int mMin=0,int mLose = 0,int mW = 0):mMaxWeight(mMax),mMinWeight(mMin),mLoseWeight(mLose),mWeigth(mW) {}    virtual ~Fruit() {}    virtual Fruit * Clone( ) const = 0;    virtual int ReduceWeight( );    virtual int  Weight( )const;protected:    int   mMaxWeight;    int   mMinWeight;    int   mLoseWeight;    int   mWeight;};int Fruit::ReduceWeight( ){int newWeight = mWeight - mLoseWeight;if (newWeight  mMinWeight )    newWeight = mMinWeight;int reduce =  mWeight - newWeight;mWeight = newWeight;return reduce;}int  Fruit::Weight( ) const{  return  mWeight;}class Apple:public Fruit{public:    Apple():Fruit(50,50*3/5,4,50) { }    virtual ~Apple( ) {}    virtual Apple * Clone() const{ return new Apple(*this); }    // other};class Orange:public Fruit{public:    Orange():Fruit(30,30*3/5,3,30) { }virtual ~Orange( ) {}    virtual Orange * Clone() const{ return new Orange(*this); }    // other};class Box{public:    Box():count(0) {for(int i=0;i8;i++) fruit[i]=0;}    ~Box() {for(int i=0;i8;i++) delete fruit[i];}    void 来源:KQ.
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月5日
下一篇 2022年1月5日

相关推荐