面向对象-聚集,程序比较发现

一、聚集概念

首先我们的明白一个概念什么是聚集,打个比方说,一支水笔是由笔芯和笔壳构成的,而笔壳又分成两部分构成的,分别是上笔壳和下笔壳(可旋转的地方)。

二、程序的比较发现

程序说明:使用台灯,线路,灯泡这三个对象进行编写程序,其中台灯和线路,灯泡是聚集关系。

功能说明:实现灯亮灭。

程序2-1如下:

 1 package com.lishaoming.main;
 2 class ReadingLamp{
 3     private Circuit circuit;
 4     private Bulb bulb;
 5     public ReadingLamp(Circuit circuit,Bulb bulb){
 6         this.circuit=circuit;
 7         this.bulb=bulb;
 8 //        circuit.setBulb(bulb);
 9 //        bulb.setCircuit(circuit);
10     }
11     public void on(){
12         circuit.switchOn();
13     }
14 }
15 class Circuit{
16     private Bulb bulb;
17     public void switchOn(){
18         bulb.ligth();
19     }
20     public void transportPower(){
21         System.out.println("The ligth on");
22     }
23 //    public void setBulb(Bulb bulb){
24 //        this.bulb=bulb;
25 //    }
26 }
27 class Bulb{
28     private Circuit circuit;
29     public void ligth(){
30         circuit.transportPower();
31     }
32 //    public void setCircuit(Circuit circuit){
33 //        this.circuit=circuit;
34 //    }
35 }
36 public class NodeMain{
37     public static void main(String[] args){
38     
39         Circuit c1=new Circuit();
40         Bulb b1=new Bulb();
41         ReadingLamp rp1=new ReadingLamp(c1,b1);
42         rp1.on();
43     }
44 }

其异常情况如下:

Exception in thread "main" java.lang.NullPointerException              //指向空指针
    at com.lishaoming.main.Circuit.switchOn(NodeMain.java:18)
    at com.lishaoming.main.ReadingLamp.on(NodeMain.java:12)
    at com.lishaoming.main.NodeMain.main(NodeMain.java:42)

程序说明:使用台灯,线路,灯泡这三个对象进行编写程序,其中台灯和线路,灯泡是聚集关系。

功能说明:实现灯亮灭。

程序2-2如下:

 1 package com.lishaoming.main;
 2 class ReadingLamp{
 3     private Circuit circuit;
 4     private Bulb bulb;
 5     public ReadingLamp(Circuit circuit,Bulb bulb){
 6         this.circuit=circuit;
 7         this.bulb=bulb;
 8         circuit.setBulb(bulb);
 9         bulb.setCircuit(circuit);
10     }
11     public void on(){
12         circuit.switchOn();
13     }
14 }
15 class Circuit{
16     private Bulb bulb;
17     public void switchOn(){
18         bulb.ligth();
19     }
20     public void transportPower(){
21         System.out.println("The ligth on");
22     }
23     public void setBulb(Bulb bulb){
24         this.bulb=bulb;
25     }
26 }
27 class Bulb{
28     private Circuit circuit;
29     public void ligth(){
30         circuit.transportPower();
31     }
32     public void setCircuit(Circuit circuit){
33         this.circuit=circuit;
34     }
35 }
36 public class NodeMain{
37     public static void main(String[] args){
38     
39         Circuit c1=new Circuit();
40         Bulb b1=new Bulb();
41         ReadingLamp rp1=new ReadingLamp(c1,b1);
42         rp1.on();
43     }
44 }

  总结,通过比较程序2-1和2-2,我们可以发现,其中的区别在于两个引用对象circuite和bulb没有指向具体的对象,因此需要创建方法使得应用变量指向对象,但是其中又有两种方法,如程序2-2和程旭2-3所示。

程序说明:使用台灯,线路,灯泡这三个对象进行编写程序,其中台灯和线路,灯泡是聚集关系。

功能说明:实现灯亮灭。

程序2-3如下:

 1 class ReadingLamp{
 2 //        ReadingLamp rp=new ReadingLamp();
 3 //        private Bulb bulb;
 4 //        private Circuit circuit;
 5 //        public ReadingLamp(Bulb bulb,Circuit circuit){
 6 //            this。bulb=bulb;'
 7 //            this.circuit=circuit;
 8 //        }
 9         public void ou(){
10             new Circuit().SwitchOn();
11         }
12         public void on(){ 
13             new ReadingLamp().ou();
14     
15         }
16 }
17 class Circuit{
18     public void SwitchOn(){
19         new Bulb().Ligth();
20     }
21     public void TransportPower(){
22         System.out.println("灯开了");
23     }
24 }
25 class Bulb{
26     public void Ligth(){
27         new Circuit().TransportPower();
28     }
29 }
30 public class NodeMain {
31     public static void main(String[] args) {
32         ReadingLamp rp1=new ReadingLamp();
33         rp1.on();
34     }
35 }

  总结,通过观察程序2-2和程序2-3可以得知,此处有两种方法解决程序1-1所出现的问题,并且两种方法都可行,但是程序2-2这种方法更能体现出聚集的关系。

原文地址:https://www.cnblogs.com/fengyunlsm/p/4851976.html