对象容器的问题
在面向对象系统中,我们常会遇到一类具有"容器"特征的对象---即它们在充当对象的同时,又是其他对象的容器。
public interface IBox { }
public class SingleBox : IBox
{
public void Pocess() { }
}
public class ContainerBox : IBox
{
public void Process() { }
public ArrayList GetBoxes() { }
}
class App
{
public static void Main(string[] args)
{
IBox box = Factory.GetBox();
//客户代码与对象内部结构发生了耦合
//也就是说客户代码得判断对象的类型,而松耦合的状态意昂该是
//客户代码接口只与IBox有关
if (box is ContainerBox)
{
box.Process();
ArrayList list = ((ContainerBox)box).GetBoxes();
//....面临更复杂的递归处理;
}
else if (box is SingleBox)
{
box.Process();
}
}
内部实现结构和外部客户代码有依赖
public class SingleBox : IBox
{
public void Pocess() { }
}
public class ContainerBox : IBox
{
public void Process() { }
public ArrayList GetBoxes() { }
}
class App
{
public static void Main(string[] args)
{
IBox box = Factory.GetBox();
//客户代码与对象内部结构发生了耦合
//也就是说客户代码得判断对象的类型,而松耦合的状态意昂该是
//客户代码接口只与IBox有关
if (box is ContainerBox)
{
box.Process();
ArrayList list = ((ContainerBox)box).GetBoxes();
//....面临更复杂的递归处理;
}
else if (box is SingleBox)
{
box.Process();
}
}
内部实现结构和外部客户代码有依赖