信息专家原则(Information Expert)
Information Expert的本质指的是我们应该将职责委托给哪一个对象,这个职责可以是一个方法,也可以是一个算法或者其他内容。它是面向过程设计过程中最基本的原则。
委托原则:我们在设计对象的时候,如果某个对象拥有完成某个职责所需要的所有信息,那么这个职责就分配给这个对象实现。这个时候,这个类就是相对于这个职责的信息专家。
举例:计算订单的总价
分三个类:1.商品类:提供商品的单价
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Product{ 7 private: 8 string name; 9 double price; 10 public: 11 Product() { 12 cout << "输入商品名称:"; 13 cin >> name; 14 cout << "输入商品价格:"; 15 cin >> price; 16 17 } 18 public: 19 double getPrice() { 20 return price; 21 } 22 };
2.销售单个商品条目类:提供购买商品的数量,并计算每类商品的总价
1 #include "Product.h" 2 3 class SaleLineItem { 4 private: 5 int num; 6 double SumItemPrice; 7 Product p; 8 public: 9 SaleLineItem() { 10 cout << "输入购买商品数量"; 11 cin >> num; 12 } 13 public: 14 double getSumItemPrice() { 15 SumItemPrice = p.getPrice() * num; 16 return SumItemPrice; 17 } 18 };
3.结算类:将每类商品的总价汇总
1 #include "SaleLineItem.h" 2 #include <vector> 3 4 class Sale 5 { 6 private: 7 double SumTotal; 8 vector<SaleLineItem> Items; 9 public: 10 void inputItem(SaleLineItem s) { 11 Items.push_back(s); 12 } 13 public: 14 void getSumTotal() { 15 SumTotal = 0; 16 for (int i = 0; i < Items.size(); i++) 17 { 18 SumTotal += Items[i].getSumItemPrice(); 19 } 20 } 21 public: 22 void outputItem() { 23 cout << "总价:"<<SumTotal << endl; 24 } 25 };
4.main类
1 #include <iostream> 2 #include "Sale.h" 3 4 5 void main() 6 { 7 SaleLineItem s1; 8 SaleLineItem s2; 9 10 Sale sale; 11 12 sale.inputItem(s1); 13 sale.inputItem(s2); 14 15 sale.getSumTotal(); 16 sale.outputItem(); 17 }
学习笔记,仅供参考。