zoukankan      html  css  js  c++  java
  • 【Thinking in Java】组合、继承和代理的区别

    1. 三者的定义:
      1. 组合:在新类中new 另外一个类的对象,以添加该对象的特性。
      2. 继承:从基类继承得到子类,获得基类的特性。
      3. 代理:在代理类中创建某功能的类,调用类的一些方法以获得该类的部分特性。
    1. 使用场合:
    • 组合:各部件之间没什么关系,只需要组合即可。like组装电脑,需要new CPU(),new RAM(),new Disk()……

      演示代码如下:

      

     1 public class Computer {
     2     public Computer() {
     3         CPU cpu=new CPU();
     4         RAM ram=new RAM();
     5         Disk disk=new Disk();
     6     }
     7 }
     8 class CPU{    }
     9 class RAM{    }
    10 class Disk{    }
    • 继承:子类需要具有父类的功能,各子类之间有所差异。like Shape类作为基类,子类有RectangleCirCleTriangle……代码不写了,大家都经常用。
    • 代理:飞机控制类,我不想暴露太多飞机控制的功能,只需部分前进左右转的控制(而不需要暴露发射导弹功能)。通过在代理类中new一个飞机控制对象,然后在方法中添加飞机控制类的各个需要暴露的功能。

      演示代码如下:

     1 public class PlaneDelegation{    
     2     private PlaneControl planeControl;    //private外部不可访问
     3     /*
     4      * 飞行员权限代理类,普通飞行员不可以开火
     5      */
     6     PlaneDelegation(){
     7         planeControl=new PlaneControl();
     8     }
     9     public void speed(){
    10         planeControl.speed();
    11     }
    12     public void left(){
    13         planeControl.left();
    14     }
    15     public void right(){
    16         planeControl.right();
    17     }
    18 }
    19 
    20 final class PlaneControl {//final表示不可继承,控制器都能继承那还得了。。
    21     protected void speed() {}
    22     protected void fire() {}
    23     protected void left() {}
    24     protected void right() {}
    25 }
  • 相关阅读:
    uva 11275 3D Triangles (3D-Geometry)
    uva 12296 Pieces and Discs (Geometry)
    poj 1514 Metal Cutting (dfs+多边形切割)
    poj 1474 Video Surveillance (半平面交)
    poj 3335 Rotating Scoreboard (Half Plane Intersection)
    poj 2451 Uyuw's Concert (半平面交)
    poj 1279 Art Gallery (Half Plane Intersection)
    hdu 1255 覆盖的面积 (Bruceforce)
    # WinForm关闭窗体确认
    List<T>随机返回一个
  • 原文地址:https://www.cnblogs.com/darkhorse-pxf/p/4423418.html
Copyright © 2011-2022 走看看