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

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

一、继承

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

【大话设计模式】UML关系在代码中的表现形式_第1张图片

   

<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>

二、关联

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

【大话设计模式】UML关系在代码中的表现形式_第2张图片

<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>

三、实现

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

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

【大话设计模式】UML关系在代码中的表现形式_第3张图片

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

<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对象的一部分。聚合关系用空心的菱形和实现箭头来表示。

【大话设计模式】UML关系在代码中的表现形式_第4张图片

聚合代码如下:

<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

【大话设计模式】UML关系在代码中的表现形式_第5张图片

组合关系对应的代码

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

六、依赖

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

【大话设计模式】UML关系在代码中的表现形式_第6张图片
代码如下:

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

    }
    class Water       //水类
    {

    }

七、总结

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


你可能感兴趣的:(设计模式,编程)