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


    一、聚集概念

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

    二、程序的比较发现

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

    功能说明:实现灯亮灭。

    程序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这种方法更能体现出聚集的关系。

  • 相关阅读:
    HDOJ 5414 CRB and String 模拟
    Python标准库:内置函数all(iterable)
    Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack.
    关于TabLayout+ViewPager组合实现多页面滑动
    互联网产品经理应该具备的技能(需求篇)
    【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸
    mybatis自己主动生成mapper,dao,映射文件
    Java解析注解
    如日中天的Uber到底是用什么开发语言做到的?
    [Swift]LeetCode1002. 查找常用字符 | Find Common Characters
  • 原文地址:https://www.cnblogs.com/fengyunlsm/p/4851976.html
Copyright © 2020-2023  润新知