OOD沉思录 之 类和对象的关系--包含关系2
|
4.6 尽量让类中定义的每个方法尽可能多地使用包含的对象(即数据成员) class 澡堂
{
stack<中专生> 普通服务员;
stack<大学生> VIP服务员;
普通接待()
{
普通服务员.Pop().侍候();
}
普通结帐()
{
普通服务员.Pop().结帐();
}
Vip接待()
{
VIP服务员.Pop().侍候();
}
VIP结帐()
{
VIP服务员.Pop().结帐();
}
}
这是一个我经常看到的类似结构,这种结构不可避免地会在使用者的代码里进行很多条件判断,来确定到底调用那个版本的方法,而这种判断最好避免。 class 澡堂
{
abstract 接待();
abstract 结帐();
}
class 普通澡堂:澡堂
{
stack<中专生> 服务员;
接待()
{
服务员.Pop().侍候();
}
结帐()
{
服务员.Pop().结帐();
}
}
class VIP澡堂:澡堂
{
stack<大学生> 服务员;
Vip接待()
{
服务员.Pop().侍候();
}
VIP结帐()
{
服务员.Pop().结帐();
}
}
这样这个类的使用者可以使用如下方法: 澡堂 tmp=null;
if(顾客 is 普通客户)
tmp=new 普通澡堂();
if(顾客 is VIP客户)
tmp=new VIP澡堂();
tmp.接待();
//......
tmp.结帐();
眼神好的可能马上就会提出,这里也进行了判断,但是这里的判断我们可以通过两种手段来处理 澡堂 tmp=dic[顾客类型];
tmp.接待();
//......
tmp.结帐();
二,简单工厂 澡堂 tmp=澡堂Factory.Create(顾客类型);
tmp.接待();
//......
tmp.结帐();
这两种方式都可以在程序配置的时候进行调整,将类型的依赖延迟到配置细节中(而这正是类型注入的要旨,别被那些专有的很玄的框架名次忽悠,其实就是这么简单)。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
