首页 > 代码库 > 设计模式中的关系在代码中的实现

设计模式中的关系在代码中的实现

  我们都学过UNL,其中类图中有6类关系:泛华(继承)、实现、关联、组合、聚合、依赖。由于他们之间也存在各种联系,我就将他们分为了4大类:依赖、关联、继承、实现。

  整理如图:

 

  从这个图中,我们就可以看出我是如何划分的了:聚合和组合是关联的特殊形式,所以就这样划分了。

  我们知道,这6个关系的耦合的耦合度:继承=实现<依赖<关联<聚合<组合。

  那么下一步,我们就看看,他们在设计模式的代码中是怎样实现的。

 

  1、依赖关系

     依赖关系的定义很绕口,其实说白了就是:一个对象依赖于另一个对象的服务。在C#中的实现很简单就是:A依赖于B对象,那么B对象大多数情况下是A对象的方法参数、方法局部变量或者是静态方法调用。

     举个例子:

    

      植物的生长需要水和阳光,就是依赖关系。阳光和水是植物的吸收和吸取方法的参数。用C#代码实现就是:

     

    public class Plant
    {
        public void absort(Sunshine sun)
        {
            Console.Write("吸收阳光");
        }
        public void ShutUp(Water water)
        {
            Console.Write("吸收水分");
        }
    }

  2、关联

     对于两个相对独立的对象,当一个对象的实例与另一个对象的额特定实例存在固定的对应关系。关联表现为:类A当中使用了类B作为成员变量。

    


      如上图,代码实现为:

    public class Son
    {
        Father father = new Father();
        public void getGift()
        {
            Console.Write("从" + father.getname()+"获得礼物");
        }
    }

  3、聚合

     聚合是特殊的关联,反映了“整体”-"部分"的关系。

    聚合关系耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。

         代码实现:

public class People{  
    Car car;  
    House house;   
    //聚合关系中作为成员变量的类一般使用set方法赋值  
     public void setCar(Car car){  
        This.car = car;  
    }  
    public void setHouse(House house){  
        This.house = house;  
    }  
  
    public void driver(){  
        <span style="font-family:Arial;"></span><pre name="code" class="csharp">        Console.Write(“车的型号:”+car.getType());  
    }  
    public void sleep(){  
        <pre name="code" class="csharp">        Console.Write(“我在房子里睡觉:”+house.getAddress());  
    }  
}  


  4、组合

     组合是一种特殊的关联,耦合度比聚合大,代码实现相同,要理解,不同点在于:是组合中的“整体”是不能缺少“部分”。

      

      代码实现是:

<span style="font-size:18px;">    public class Body
    {
        Ear ear =new Ear;
        Eyes eyes =new Eyes;
        public void listen(){
            Console.Write("身体需要"+ ear.getname()+"来听");
        }
                public void sleep(){
            Console.Write("睡觉时需要"+ ear.getname()+"闭上");
        }
    }</span>

   5、继承

        继承分为两种一种是继承抽象类,一种是实现接口。两个的区别是:

        抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

        第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
        第二点. 接口可以多继承,抽象类不行
        第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
        第四点. 接口中基本数据类型为static 而抽类象不是的。

   

  6、实现

        实现的耦合度和继承是相同的,实现就是一个类去实现一个或多个接口。接口定义方法,类去实现方法,就是这样。

       ok,关于继承和实现的代码其实很简单,使用了关键字,各种语言的关键字不同。


     总结:

             关于设计模式,如果不知道UML图中的关系是怎样实现的,那么就等于完全处于架空状态。设计模式需要我们不但要看懂UML图,还要会灵活应用,这是设计模式的基础。