抽象的优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
	};

改进

  1. 增添一个共同的抽象Component
  2. Component中可以增加一个rebate()函数
  3. Component中增加一个netPrice()函数
	class Component{
		public:
			virtual int price()=0;
			virtual int rebate();
			virtual char *name();	
	};
	class Card : public Component{···}
	class Monitor : public Component{···}

改进原因

  1. Card和Monitor类是相似的,但是没有联系起来,他们都是作为电脑的组件,所以可以再次抽象;
  2. 所有的物品都可能会打折,我们不能只根据目前的情况只针对一个类实现打折,我们可以统一起来,根据具体需要重写rebate;
  3. 对于每个组件都实现netPrice,以便于后来的统一和计算。

猜你喜欢

转载自blog.csdn.net/Gease_Gg/article/details/83586228
今日推荐