使用对象聚合和组合的优点及隐患

使用对象聚合和组合的优点及隐患

在网站建设实际开发中,了解什么时候该应用聚合或组合非常重要。怎么样才能知道什么时候对象A应该与对象B聚合或组合呢?问一问自己,“如果对象A消亡会发生什么呢?对象B还会继续存在吗?”如果对象B需要在对象A消亡后继续存在,对象A应该聚合对象B。但是如果对象B在对象A消亡时一同消亡,那么对象A应该组合对象B。

聚合与组合相比具有管理负担较低的优势,因为一个对象可以被其他多个对象所共享。将数据库链接类进行聚合确实是一个好想法,采用组合的方法进行查询会导致多个对数据库的连接,这将会造成应用程序由于较高的流量级别而变得缓慢。

组合使得类更易于使用,因为他们是自成一体的。使用这些类的代码不必担心会将其传递给其他需要它的对象,在复杂的应用程序中,这经常会变得非常棘手以至于需要我们开发一个设计方案。组合的另一个好处是,查看使用它的代码时,可以准确地知道哪个类能够访问已组合的对象。

聚合的问题之一是,共享已聚合对象的某个对象可能会改变已聚合对象的状态,导致该对象无法再被希望使用它的其他类使用。

多态是对象编程的另一个强大功能,不同的对象能够共享同一个接口,因此可以实现交换。

接口是提供给一个或者多个方法的名称,使您能够为了某种特定目的使用类。例如,想象一下有两个数据库连接类,一个用于MYSQL,另一个用于postgresql。只要他们都提供query方法,那么就可以互换他们,从而可以在不同数据库上运行查询,当然,所使用的SQL语句必须在两种数据库中都有效。在这种情况下,query方法就代表两个类可以共享的一个简单接口。

共享同一个接口的类通常都从

一个父类继承,这样它们可以使用共同方法,或者实现一个共同的接口。下面的示例很好的说明了这个概念。

父类htmlelement包含了所有子类的共有功能。然而,我们并不是真的希望从htmlelement类示例化对象,它没有标记名称信息,因此无法输出任何有用的html代码。因此,使用abstract关键字使其成为一个抽象基类,该基类提供了htmlelement对象需要的最小功能概括:通用的getsource和getattributesource方法。我们将扩展htmlelement类来定义具体的子类,每个子类都创建一个可构建html元素的特定方法。

抽象和具体这两个属于是指类的用法,特指是否要直接使用一个类。抽象类是指那些具有可被所有子类共享的功能或结构的类,尽管该类自身不能被直接使用,换言之,不应该直接通过抽象类创建对象。如果尝试这样做,将会产生一个致命错误。具体类是抽象类的子类,可以通过具体类创建对象。

有很多可以使用abstract关键字的地方,而不仅仅是在类这个层次,通常情况下。抽象类还具有一个或多个空方法,这些方法不执行任何工作,只要求指定的子类实现它们。例如,可以增加一个假设的方法addcontent,只包含它的方法名和参数。

以这种方式定义抽象方法允许抽象类的坐着说明该类的意图,而不需要实现它们,在这个示例中,抽象方法addcontent必须接受一个包含htmlelement对象的参数。抽象方法要求任何子类必须实现该方法。尽管抽象方法的本意是强制所有htmlelement对象向其内部内容添加一个子HTML元素,但是每个HTML元素可以通过强度所有htmlelement对象向其内部内容元素只能包含某种类型的子元素,而其他一些html元素可以通过不同方式实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值