oop - 编写一个包含它是实例化的类的单例是常规的吗?
问题描述
是否习惯性地编写一个包含它创建对象的类的单例,此外这个类包含一个私有构造函数,这样就不可能通过“new”关键字从这个类创建另一个对象?
package com.isi.core;
import com.isi.handlers.MouseMotionHandler;
import com.isi.states.MainMenuState;
import com.isi.states.PlayState;
import com.isi.uicomponents.Button;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Singleton {
private static MouseHandler instance = null;
public static MouseHandler getInstance(Game game) {
if (instance == null)
instance = new MouseHandler(game);
return instance;
}
public static class MouseHandler extends MouseAdapter {
private Game game;
private MouseHandler(Game game) {
this.game = game;
}
public void mousePressed(MouseEvent e) {
MouseMotionHandler mouseMotionHandler = game.getMouseMotionHandler();
if (mouseMotionHandler.getOnComponent() != null && e.getButton() == 1 && mouseMotionHandler.getOnComponent() instanceof Button) {
Button button = (Button) mouseMotionHandler.getOnComponent();
if (game.getState() instanceof MainMenuState) {
if (button.getText().getString().equals("Play")) {
game.getGameStateManager().push(new PlayState(game));
} else if (button.getText().getString().equals("Exit")) {
System.exit(0);
}
}
}
}
public void mouseReleased(MouseEvent e) {
}
}
}
我创建了一个单例类,它返回从私有 MouseHandler 构造函数创建的单个 MouseHandler。
解决方案
推荐阅读
- java - BitTorrent,DHT,BEP42,计算我的 NodeId
- java - 字符串太大,无法使用 UTF-8 进行编码,而是写为“STRING_TOO_LARGE”
- typescript - Angular6错误:未捕获(承诺):TypeError:(中间值).map不是函数
- ios - 在不更改 BundleId 的情况下辞职 iOS 应用程序 .iPA 文件
- svg - 自定义标记的 SVG 折线
- javascript - 如何从 VueJs 中的 body 获取参数值?
- sql - 将两个不同查询的结果相加
- html - sqPaymentForm 不适用于 IOS 自动填充
- codenameone - 应用停止/恢复后将代号一组件保持在无效位置
- .net - .Net WebApi - CustomValidation 方法调用两次