您的位置:首页 > 编程语言 > Java开发

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

2017-06-18 17:07 120 查看

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息