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);
}
}