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); }}
来源: http://www.92to.com/bangong/2017/06-20/23662569.html