作业03 结构型模式
1. 现Mouse类的定义如下:
class Mouse
{
public:
void Walk( int steps )
{ cout<<"Implement for Walk() with Verson 1."}
void AddMoney(int m)
{ cout<<"Implement for AddMoney() with Verson 1."}
private:
int posX;
int posY;
};
若已知:在后续的版本中
a)可能会增加Mouse类的其他行为,如增加Drive(int steps)和Fly(int steps);
b)可能需要改变Walk(int steps)的具体实现细节;
c)可能会增加其它数据成员,如将2D位置信息改为3D位置信息等。
d)希望在新版本中,尽可能地通过扩展老版本,适应新需求。
请使用桥接模式重新设计Mouse类及相关类,并简要说明如何适应变化a-d。
2. 请设计并实现一个foo.dll,其中含有类如下:
a) 若foo.dll直接导出了类Foo、类FooA、类FooB,请使用类适配器和对象适配器,实现
class User {
public:
int myProcess( ) { /*适配Foo.process(); */ }
};
b) 若foo.dll没有导出类Foo、类FooA、类FooB,但导出函数shared_ptr createFooA();和shared_ptr createFooB();,请使用对象适配器使得User可以适配任意指定的Foo类族的子类对象的process。
3. 针对给出的场景、描述,请说出最适当的模式名字,并用文字或示例代码给出简要的使用说明或解释。
1) 开发了一个用于数值计算的大型程序库,它的功能是强大的,但需要使用者具备较高的数学专业知识。为方便“菜鸟”级用户的使用,需要提供一个简化版的,但同时又不希望影响专业人员的使用。使用哪种设计模式较好?如何设计?
2) 在2D游戏的开发中,需要绘制地图,地图是由大量的“一样的图块”拼接而成,而“图块”的种类有限,目前有草地、海洋、沙漠、山地等,未来肯定要增加种类,但不会太多太频繁。采用何种模式组织“图块”类比较好?如何设计?
3) 在开发一个办公自动化系统时,项目组在ElectricSignature类集中实现了电子签名的功能。但在使用中发现该类不能完全满足用户需求,由于财力和人员的限制,决定直接购买第三方电子签名软件,其中的FZ_ESignet类功能与ElectricSignature的功能一样,但是两个类中的函数名都是不一样的,而且购买的只是二进制代码,没有源代码。现希望使用第三方软件的功能,但又不希望修改ElectricSignature的接口。使用哪种设计模式改进较好?如何改进?
4) 某书店需要开发一套图书购销存软件。在设计图书类时发现:图书有单行本和成套的,又细分成教辅材料、科学知识、文学著作等。设计时,希望能够以一致的方式访问各种图书,不论是单本的、成套的、IT类的或古典名著。使用哪种设计模式较好?如
1