如果你说的是数据很大怎么办,可以看cc150 scalability那一章,还比较实用,最常
见的就是用bitset之类,或者把数据分成很多小块。
最近稍微总结了下设计题大致的思路,不过这东西太灵活,很难有实质性的解题规律:
Step 1 先不考虑需要的功能
Step 1.1 分析静态、基本的实体( entities ), 并考虑他们之间的"has"关系,如"A
party has some guests."; 如果其中有全局的实体,则可以考虑使用Singleton
Pattern。
Step 1.2 考虑衍生的实体类型,考虑他们与基本实体之间的"is"关系(Inheritance )
,如"A dog is an animal.", 分析基本属性( base class variables )与衍生属性(
sub class variables )。
Step 1.3 如果需要检索,在基本属性之间则可能需要建立mapping,如map
userid_to_machine,可以使用std::map或std::unordered_map。
Step 2 根据问题所需要的功能,分析行为的主体与路径(谁调用谁去做某事,最终是
谁进行操作,注意这里的"谁"都应该用指针来表示)。如果路径所经过的主体,存在
subclass,则应该用Virtual Function来实现当前主体及其不同subclass的不同行为,
实现Polymorphism。
如果路径经过的主体,需要创建不同类型的物件,则可以考虑使用Factory Pattern,
即在该主体中定义一个virtual factoryMethod(), 用于根据需要,创建不同类型的物
件;或者为这些物件定义一个基本类Base,并定义一个成员函数static Base *make_
base( int typeChoice );, 方便其他主体创建该类型物件。