关于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上进行扩展、变异,那么直接用实例比较好,如果有“变异”,那么使用继承比较好。
完成。
昨天,遇到了一个问题,我和另一个同事提出了两个不同的解决方式,从而引发了对实例复用和继承复用的讨论。
问题如下:
系统中出现了一个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上进行扩展、变异,那么直接用实例比较好,如果有“变异”,那么使用继承比较好。
完成。
相关文章推荐
- 关于继承和复用的汽车类(绿柠檬学习笔记)
- 关于实例初始化块和static及继承的综合实例
- 让我顺间思路清晰的一个无聊调试(关于实例、继承)
- oop特性——继承以及复用类的详解
- 关于js oop,继承实现的5、6、7、8种方法中的最佳方法
- 有关于 继承的实例
- Java-关于子类是否继承了父类的private实例变量
- OOP特性——继承以及复用类的详解
- 关于继承的应用小实例
- Python面向对象类继承和组合实例分析
- OC小实例关于init方法不小心的错误
- 一次错误的总结(关于:在实例方法和类方法公用一段代码)
- Qt问题记录: 关于继承顺序不同导致编译不过
- ArcGIS API for Windows Phone开发实例(4):点击查看超市信息 --- 关于使用InforWindow
- 关于java继承中父类方法可见性探讨
- 深入理解OOP(二):多态和继承(继承)
- 关于opacity透明度子元素继承现象的若干研究以及hack方法
- Maven聚合与继承的实例讲解(二)
- 关于回调函数的本质及比喻和实例分析
- 小白成长之路(7)--C++多层派生类继承实例(期中考试)