【大话设计模式】UML关系在代码中的表现形式

来源:互联网 发布:网络依赖症定义 编辑:程序博客网 时间:2024/05/17 00:16

    大话设计模式学习了24个设计模式,学习这本书要了解每个模式所对应的故事是什么,看了UML图要知道它对应的代码是什么,现在介绍一下uml关系在代码中的表现形式。

一、继承

继承定义父类和子类,其中子类继承父类的所有特性,而且子类还可以定义新的特性。子类拥有父类非private的属性和功能,子类可以扩展父类没有的属性和功能,子类还可以以自己的方式实现父类的功能(方法重写)

   

<span style="font-family:KaiTi_GB2312;font-size:18px;">class Animal                 //动物类作为父类   {       protected string name;       public Animal(string name)//名字属性       {           this.name = name;       }       public void Reproduce()//定义父类的方法       {         }     }   class Birds : Animal    //鸟类作为子类,继承与动物类   {       public Birds(string name) : base(name) { }//子类构造方法需要调用父类同样的参数类型的构造方法       public void Reproduce                          //子类继承父类的方法       {       }       public void Fly                           //子类的特有方法      {       }   }  </span>

二、关联

关联是一种“拥有”关系,指一个类需要“知道”另一个类的属性和方法。如企鹅和气候类,企鹅需要知道气候的变化,需要了解气候规律。

<span style="font-family:KaiTi_GB2312;font-size:18px;">class Climate                              //气候类  {      public  string climate;                    public string Climate      {          get { return climate; }          set { climate = value; }      }      }  class Penguin  {      Climate climate;                  //Penguin类中引用Climate      public Penguin(Climate climate)      {          this.climate = climate;      }        public void  migrate()      {          Console.WriteLine("");      }        }  </span>

三、实现

实现是指接口和类之间的关系,是实现类实现接口的功能。

接口的表示方法有两种:矩形表示法和棒棒糖表示法。

唐老鸭讲人话为例,实现代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">interface ILanguage         //定义接口    {         string Speak();           }    class Donald Duck : ILanguage         {        public void Speak()        {            Console.WriteLine ("唐老鸭讲话");        }    }</span>

四、聚合

聚合表示的是一种弱的“拥有”关系,体现的是A对象包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形和实现箭头来表示。

聚合代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">  class Penguins    {        private Penguin penguin;                 //声明一个Penguin 对象        public Penguins(Penguin penguin)         //通过构造方法,传入具体的对象penguin        {            this.penguin = penguin;        }    }    class Penguin    {    }</span>

五、组合

组合是一种强的拥有关系,是一种整体和部分的关系,部分和整体的生命周期一样。数字“1”和“2”称为基数。表明这一端的类可以有几个实例,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则用“n”来表示。关联关系、聚合关系也可以有基数。这让我想到了实体图里面的1:M,1:N,和M:N


组合关系对应的代码

class Bird{     private Wing wing;       //声明一个Wing对象     public Bird()     {         wing=new Wing();          //在Bird类中,初始化时,实例化翅膀Wing,它们之间同时生成      }}

六、依赖

动物会新陈代谢,能繁殖,动物要生存需要水和氧气等,动物要依赖于氧气和水。


代码如下:

abstract class Animal {    public Metabolism (Osygen oxygen,Water water)   //氧气和水作为参数}    class Oxygen   //氧气类    {    }    class Water       //水类    {    }

七、总结

每一个模式都会有UML图,代码就是根据图写出的,了解这些关系非常重要,而熟悉掌握这些需要我们多看多用。


0 0
原创粉丝点击