Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1372354
  • 博文数量: 205
  • 博客积分: 6732
  • 博客等级: 准将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 17:59
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(10)

2014年(1)

2013年(39)

2012年(23)

2011年(27)

2010年(21)

2009年(55)

2008年(28)

我的朋友

分类: Java

2010-03-16 23:21:29

"Is-a”代表类之间或类与接口的继承关系,比如猫是动物,狗也是动物,都继承了动物的共同特性,再用OO语言实现时,应将猫和狗定义成两种类,均继承动物类。
"Has-a"代表的是对象和他成员的从属关系,同一种类的对象,通过它们的属性的不同值来区别。比如张三和李四都是人,但他们的名字不一样,可以以此区分这两个具体的人。名字应该作为人的成员变量。如果将名字叫“张三”的人和名字叫“李四”的人分别定义成两个类,均继承“人”这个类,显然是不合理的。


装饰模式中有出现两者同时用的情况,一个类在接口上表现为is-a的继承关系,但在实现上又表现为has-a的组合关系,简要代码:

abstract class Decorator : Component//---Decorator “is-a” Component
{
    protected Component component;//---Decorator “has-a” Component

    public void SetComponent(Component component)
    {
        this.component = component;
    }

    public override void Operation()
    {
        if (component != null)
        {
            component.Operation();
        }
    }
}


详细代码:http://www.cnblogs.com/MaoBisheng/archive/2008/08/16/1269404.html?updated=1

本文转自:http://www.cnblogs.com/maobisheng/archive/2008/08/31/1280444.html

阅读(1877) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~