zoukankan      html  css  js  c++  java
  • 设计图案之间关系的代码实现

      我们都学会了UNL。在类图中有6一流的关系:概括(继承)、实现、联想、组合、聚合、依靠。因为有各种各样的它们之间的联系,我将他们入4分类:依赖、关联、继承、实现。

      整理如图:

     

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

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

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

     

      1、依赖关系

         依赖关系的定义非常绕口,事实上说白了就是:一个对象依赖于还有一个对象的服务。在C#中的实现非常easy就是: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,关于继承和实现的代码事实上非常easy。使用了keyword。各种语言的keyword不同。


         总结:

                 关于设计模式,假设不知道UML图中的关系是如何实现的。那么就等于全然处于架空状态。

    设计模式须要我们不但要看懂UML图,还要会灵活应用。这是设计模式的基础。


     

     

        

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    byte在计算机中的存储方式--Double.byteValue()的输出结果思考
    启动Eclipse时An internal error occurred during: "Initializing Java Tooling".错误
    java实现两个int数交换
    cmd编译运行java
    java配置环境变量
    使用jQuery获取session中存储的list集合
    搭建ssm框架,可实现登录和数据展示以及增删改查
    java 生成UUID
    jQuery serialize()方法获取不到数据,alert结果为空
    SpringMVC架构的项目,js,css等静态文件导入有问题
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4728023.html
Copyright © 2011-2022 走看看