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

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);
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值