您的位置:首页 > 运维架构

关于OOP中的实例复用和继承复用

2005-10-19 13:25 351 查看
大家都知道,在面向对象的OOP语言设计中,为了增加代码的复用,有两种方式:一种是New一个Class的实例,另一种则是继承某一个Class。

昨天,遇到了一个问题,我和另一个同事提出了两个不同的解决方式,从而引发了对实例复用和继承复用的讨论。

问题如下:
系统中出现了一个UI,在不同的地方都会得到使用,界面相同,只不过逻辑控制不同。例如,对于New和Edit界面,其实它们是同一个UI,但是却有着不同的逻辑操作,比如,New界面没有不用加载数据,而Edit需要加载数据。

OK,问题确定。我给大家介绍一下我们讨论的过程。

1、首先,我们发现New和Edit虽然UI相同,但是却无法复用。原因在于Edit的UI中混合了太多的逻辑控制代码,UI和逻辑控制绑在一起,我们根本无法将UI剥离出来,进行复用。因此,我提出,应该将UI和对UI的逻辑控制分开,不要将逻辑控制代码Hard Code到UI上,而是构架中间层,将UI的逻辑控制剥离出来,以实现UI和逻辑控制代码的复用。

2、这时,一个同事提出了另一个思路,在UI上不加入逻辑控制代码,然后继承两个子类Edit UI和New UI,然后分别在Edit UI和New UI上加入逻辑控制代码,而且我们可以新增一些控件。这样也能够实现对父类UI的复用。

对于这种方法,我当时也觉得可以实现我们的复用需求,但是,后来想想,有2问题:

问题一:如果Edit UI和父UI完全相同,OK,这样做是能够实现父UI的复用的。但是,既然完全没有变化,为什么不直接使用原来的UI,而非得Clone一个相同的子类呢?你可能说,我添加了逻辑控制代码,不算改变吗?我觉得还是有问题,将UI和逻辑控制绑定在一起,必然降低逻辑控制代码的复用性。

问题二:如果Edit UI在父UI的基础上进行修改,有和逻辑控制代码绑定在一起,那么如果我想复用Edit UI怎么办呢?

总结:
1、将UI和逻辑控制代码分离,能够很好的实现UI的复用和逻辑代码的复用。
2、如果不需要在原来的Class上进行扩展、变异,那么直接用实例比较好,如果有“变异”,那么使用继承比较好。

完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: