课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
角色对象模式我们在前几期的文章中已经给大家介绍过很多次了,而今天我们就一起来了解一下,角色对象模式的概念与优缺点。
角色对象(Role Object)模式建议把一个对象的特定内容视图拆分成角色对象。角色对象能过动态的从核心对象(Core Object)中添加和移除。我们把这种由一个核心及角色对象构成的相关的组合对象结构称作主语(Subject)。一个主语通常扮演不同的角色并且同一个角色也很可能是在不同的主语中。比如两个客户可以独立扮演借贷者以及投资者就角色。这两个角色都是在单个的客户对象主语中完成工作。
角色对象模式有如下优点及重要性:
关键抽象定义简洁。Component接口很好的关注了被模型化的关键抽象的本质的状态及行为,他不会因为特定的角色接口的扩展变的臃肿;
角色演化很简单并且角色之间时相互独立的。扩展一个Component接口很容易,因为没有必要改变ComponentCore类。一个具体角色类让你可以添加新的角色以及角色实现并且能够保护关键抽象自身;
角色对象可以动态的添加或移除。一个角色对象在运行时简单地添加或者删除与核心对象。因此,在给定环境中需要的对象是可以实时创建的。
程序之间解耦。通过从角色中准确的分离出Component接口,基于角色扩展的程序需要紧耦合的地方减少了。使用Component接口以及特定的具体角色类的程序A(ClientA)不需要知道被用于*程序*B(ClientB)的具体角色类;
类组合爆炸通过使用多继承得到避免。此模式避免了类组合爆炸,因为它通过多继承来组合不同的角色到一个类中。
角色对象模式的缺点或不利条件:
客户端变的更加复杂。相比使用Component接口,通过对象的ConcreteRole类来与对象一起工作,具有较小的代码量。客户端会在具体问题中检查对象扮演的角色,如果通过,客户端需要为这个角色进行查询,如果没通过,client针对其特定需要负责扩展核心对象,来使得核心对象可以扮演需要的角色;
不同角色间的维护约束变的困难。因为由那些变化又相互依赖的对象组成的主语的维护性约束以为为了维护全部主语的的一致性的需求就变得困难。在现实部分我们将讨论几个产生的问题。
在角色中的角色不能被类型系统强制执行。你可能会想通过角色结合的的方式来排除角色到核心对象上,或者确定的角色依赖于其他的的一些角色。但是在角色对象模式中,你不能依赖类型系统为你强制执行约束,你不得不使用运行时来检查。
维护对象身份变得困难。核心对象以及来至于概念单元的角色实例应该都有其自身的概念身份。技术上的对象身份可以通过编程语言来检查其身份(技术上的对象身份检查通过比较对象引用识别),但是Component接口上概念对象身份的检查需增加额外的操作。这里可以通过实现核心对象的引用比较来识别。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。