一、聚集概念
首先我们的明白一个概念什么是聚集,打个比方说,一支水笔是由笔芯和笔壳构成的,而笔壳又分成两部分构成的,分别是上笔壳和下笔壳(可旋转的地方)。
二、程序的比较发现
程序说明:使用台灯,线路,灯泡这三个对象进行编写程序,其中台灯和线路,灯泡是聚集关系。
功能说明:实现灯亮灭。
程序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这种方法更能体现出聚集的关系。