Thinking in java-21 单例模式和委托模式

来源:互联网 发布:经典都市小说知乎 编辑:程序博客网 时间:2024/06/05 04:58

1.单例模式 Singleton Pattern

对于class的修饰符只有2种,public和default。我们不能把class设置为private,但我们可以将一个类的构造函数设置为private。

public class Singleton{    private Singleton(){    }    private final static Singleton INSTANCE = new Singleton();    public static Singleton getInstance(){        return INSTANCE;    }    public void foo(){        //code here...    }}    //We can call foo() this way    Singleton.getInstance().foo();

2.委托模式 Delegation Pattern

public class SpaceShipControls{     void up(int velocity){}     void down(int velocity){}     void left(int velocity){}     void down(int velocity){}     void forward(int velocity){}     void back(int velocity){}     void turboBoost(){}}//One way to build a spaceship is to use inheritance.public class SpaceShip extends SpaceShipControls{     private String name;     public SpaceShip(String name)     {          this.name = name;     }     public static void main(String[] args)     {          SpaceShip spaceShip = new SpaceShip("NSEA Protector");          spaceShip.forward(100);     }}

上面代码块实际上是说不通的,因为SpaceShip ‘is-a’ SpaceShipControls 不成立。更确切的方式是:SpaceShip contains SpaceShipControls。

public class SpaceShipDelegation{     private String name;     private SpaceShipControls controls = new SpaceShipControls();     public SpaceShipDelegation(String name)     {          this.name = name;     }     //delegated methods:     public void up(int velocity)     {          controls.up(velocity);     }     public void down(int velocity)     {          controls.down(velocity);     }     public void left(int velocity)     {          controls.left(velocity);     }     public void right(int velocity)     {          controls.right(velocity);     }     public void forward(int velocity)     {          controls.forward(velocity);     }     public void back(int velocity)     {          controls.back(velocity);     }     public void turboBoost()     {          controls.turboBoost();     }     public void main(String[] args)     {          SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");          protector.forward(100);     }}
原创粉丝点击