class OnlyEngine implements Engine{ private static OnlyEngine INSTANCE; static OnlyEngine getInstance(){ if(INSTANCE == null){ INSTANCE = new OnlyEngine(); } return INSTANCE; } private OnlyEngine(){} }
时间: 2024-02-07 11:02:01 浏览: 37
这段代码是一个单例模式的实现,其中类名为 OnlyEngine,实现了 Engine 接口。该类的构造方法是私有的,因此外部无法直接实例化该类。getInstance() 方法是获取该类的唯一实例的方法,它通过判断 INSTANCE 是否为 null,如果为 null 则创建一个新的实例,否则直接返回该实例。这样可以保证在程序运行期间只有一个 OnlyEngine 的实例存在。
相关问题
class OnlyEngine implements Engine{ private static OnlyEngine INSTANCE; static OnlyEngine getInstance(){ if(INSTANCE == null){ INSTANCE = new OnlyEngine(); } return INSTANCE; } private OnlyEngine(){} }final class SingletonMain { public static void main(String[] args) { System.out.println("Pattern Singleton: only one engine"); var engine = OnlyEngine.getInstance(); var vehicle = OnlyVehicle.getInstance(); vehicle.move(); System.out.println(""" OnlyEngine:'%s', equals with vehicle:'%s'""" .formatted(engine, (vehicle.getEngine().equals(engine)))); } }enum OnlyEngineEnum implements Engine { INSTANCE }class OnlyEngine implements Engine{ private static OnlyEngine INSTANCE; static OnlyEngine getInstance(){ if(INSTANCE == null){ INSTANCE = new OnlyEngine(); } return INSTANCE; } private OnlyEngine(){} }interface Engine { }画出类图,并分析解释代码的作用
以下是代码的类图:
```
+-----------------+ +------------------+
| OnlyEngine | | OnlyEngineEnum |
+-----------------+ +------------------+
| - INSTANCE | | + INSTANCE |
| + getInstance() | +------------------+
| - OnlyEngine() | | |
+-----------------+ | Engine |
^ +------------------+
| ^
| |
| |
+------------------+ +------------------+
| SingletonMain | | OnlyVehicle |
+------------------+ +------------------+
| | | - engine |
| +main(args:[]) | | +getInstance() |
| | | +getEngine() |
+------------------+ | +move() |
+------------------+
```
代码主要实现了单例模式(Singleton Pattern),确保只有一个引擎(OnlyEngine)实例被创建。同时,车辆(OnlyVehicle)类中包含一个引擎实例,并提供了获取引擎实例和移动的方法。
`OnlyEngine` 类是一个普通的类,它的构造函数被私有化,只有 `getInstance()` 方法可以创建实例。因为 `INSTANCE` 是私有的,所以只能通过 `getInstance()` 方法获取唯一实例。
`OnlyEngineEnum` 则是使用枚举实现了单例模式,它只有一个枚举值 `INSTANCE`,在枚举中声明的常量都是 public static final 的,因此可以直接使用。
`Engine` 接口是为了方便扩展,如果需要添加新的引擎类型,只需要实现该接口即可。
`SingletonMain` 类是一个简单的测试类,演示了如何使用 `OnlyEngine` 类的唯一实例。
`OnlyVehicle` 则是一个车辆类,它包含一个引擎实例,并提供了获取引擎实例和移动的方法。在 `getInstance()` 中获取 `OnlyEngine` 类的唯一实例并将其赋值给 `engine` 成员变量,确保每个车辆只有一个引擎。
阅读全文