一般c类事故:如何实现单例的一般类 (general class)

关于一般c类事故的问题,在general class中经常遇到, 我一直试图为我的设计模式课程实现一个状态管理项目。我已经实现了单例,因为我知道这对于保持类的状态至关重要。我想做的是:创建一个通用类,以便其他人可以在他们的项目中使用它。我该怎么做?我的代码到目前为止:

我一直试图为我的设计模式课程实现一个状态管理项目。我已经实现了单例,因为我知道这对于保持类的状态至关重要。我想做的是:创建一个通用类,以便其他人可以在他们的项目中使用它。我该怎么做?我的代码到目前为止:

class StateManager{
  static final StateManager _instance = StateManager._singleton();
  StateManager._singleton();
  factory StateManager(){
    return _instance;
  }
}

我的其他解决方案,试图使它一般:

class AppProvider extends StateManager<AppProvider>{
  int i = 10;
  String data = "adas";
  
}
class StateManager<T extends AppProvider>{
  static final StateManager _instance = StateManager._singleton();
  StateManager._singleton();
  factory StateManager(){
    return _instance;
  }
}

我希望 AppProvider 类是客户端类,我希望 StateManager 自动处理 AppProvider 应该是单例的事实,并保持 AppProvider 的状态。我真的不知道该怎么做。

0

通过单独的继承强制类成为单例是行不通的。这不是语言支持的东西。构造函数不被继承,也不是静态成员,你需要那些访问单例。

为了能够完全创建类的实例,该类需要一个生成构造函数。该生成构造函数在每次调用时创建一个新实例,因为这就是生成构造函数所做的。对于能够扩展类的子类,超类也必须具有可访问的生成构造函数,但至少可以将超类设置为abstract

为了强制一个类是一个单例(如果你真的想要的,因为一个单例是一个反模式的东西;它使类的行为就像它只是一堆全局变量,这使得测试更加困难),每个这样的类需要有一个公共静态的方式来访问或创建实例,以及一个私人生成构造函数。

所以,基本上,你的第一个方法做什么是需要的,因为构造函数不继承,你需要为每个单例类这样做,没有什么有用的继承。

一种不同的方法是使状态类完全私有,因此您不必担心其他人创建实例,并为每个实例提供一个常量生成构造函数,然后仅使用引用它们const _ThisState()const _ThatState()。这将使用户(您!)只创建每个状态对象的一个实例,但它也提供了一个非常时间容易

或使用枚举模式,并有:

abstract class State {
 static const State thisState = const _ThisState();
 static const State thatState = const _ThatState();
 const State._();
 void handle(Context context, Object argument);
}
class _ThisState implements State {
  const _ThisState();
  void handle(Context context, Object argument) { ... }
}
class _ThatState implements State {
  const _ThatState();
  void handle(Context context, Object argument) { ... }
}

,然后将状态实例引用为State.thisState。我发现比创建看似不相关的类的实例更具可读性。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(109)
Cba顶薪多少:Excel-冻结顶行显示重复的顶行(freeze panes mac excel)
上一篇
Atcc和cmcc:JiraJQL运算符和+和+ 和
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(29条)