版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gease_Gg/article/details/83586228
背景
对于如下程序,请优化这些代码:
//对于函数内部的实现不看
#include <iostream>
enum CARD{CDROM,TAPE,NETWORK};
enum MONITOR{MONO,COLOR};
//扩展槽基类
class Card{
public:
virtual int price=0;
virtual char *name()=0;
virtual int rebate();
};
class Network : public Card{
public:
int price=0;
char *name()=0;
};
class Cdrom : public Card{
public:
int price=0;
char *name()=0;
int rebate();
};
class Tape : public Card{
public:
int price=0;
char *name()=0;
};
//显示器基类
class Monitor{
public:
virtual int price()=0;
virtual char *name()=0;
};
class Color : public Monitor{
public:
int price();
char *name();
};
class Monochrome : public Monitor{
public:
int price();
char *name();
};
//电脑
class Computer{
Card *card;
Monitor *mon;
public:
Computer(CARD,MONITOR);
~Computer();
int netPrice();
void print();
};
改进
- 增添一个共同的抽象Component
- Component中可以增加一个rebate()函数
- Component中增加一个netPrice()函数
class Component{
public:
virtual int price()=0;
virtual int rebate();
virtual char *name();
};
class Card : public Component{···}
class Monitor : public Component{···}
改进原因
- Card和Monitor类是相似的,但是没有联系起来,他们都是作为电脑的组件,所以可以再次抽象;
- 所有的物品都可能会打折,我们不能只根据目前的情况只针对一个类实现打折,我们可以统一起来,根据具体需要重写rebate;
- 对于每个组件都实现netPrice,以便于后来的统一和计算。