依賴,關聯,聚合,組合

依賴關係比較好區分,它是耦合度最弱的一種,在java中表現爲局域變量、方法的形參,或者對靜態方法的調用,如下面的例子:Driver類依賴於Car類,Driver的三個方法分別演示了依賴關係的三種不同形式。


    class Car {   
        public static void run(){   
            System.out.println("汽車在奔跑");   
        }   
    }   
         
    class Driver {   
        //使用形參方式發生依賴關係   
        public void drive1(Car car){   
            car.run();   
        }   
        //使用局部變量發生依賴關係   
        public void drive2(){   
            Car car = new Car();   
            car.run();   
        }   
        //使用靜態變量發生依賴關係   
        public void drive3(){   
            Car.run();   
        }   
    }  

關聯關係在java中一般使用成員變量來實現,有時也用方法形參的形式實現。依然使用Driver和Car的例子,使用方法參數形式可以表示依賴關係,也可以表示關聯關係,畢竟我們無法在程序中太準確的表達語義。在本例中,使用成員變量表達這個意思:車是我自己的車,我“擁有”這個車。使用方法參數表達:車不是我的,我只是個司機,別人給我什麼車我就開什麼車,我使用這個車


    class Driver {   
        //使用成員變量形式實現關聯   
        Car mycar;   
        public void drive(){   
            mycar.run();   
        }   
        ...   
        //使用方法參數形式實現關聯   
        public void drive(Car car){   
            car.run();   
        }   
    }  

聚合關係是是一種比較強的關聯關係,java中一般使用成員變量形式實現。對象之間存在着整體與部分的關係。例如上例中


    class Driver {   
        //使用成員變量形式實現聚合關係   
        Car mycar;   
        public void drive(){   
            mycar.run();   
        }   
    }  

假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關係了。聚合關係一般使用setter方法給成員變量賦值。

假如賦予如下語義:車是司機的必須有的財產,要想成爲一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不幹司機了,這個車就砸了,別人誰也別想用。那就表示組合關係了。一般來說,爲了表示組合關係,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car爲參數的構造方法


    public Driver(Car car){   
        mycar = car;   
    }  

所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關係,則是無法判斷的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章