外套一般都是c类吗:如何实现单例的一般类 (general cl)

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

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

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

cl AppProvider extends StateManager<AppProvider>{
  int i = 10;
  String data = "adas";
  
}
cl 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 cl State {
 static const State thisState = const _ThisState();
 static const State thatState = const _ThatState();
 const State._();
 void handle(Context context, Object argument);
}
cl _ThisState implements State {
  const _ThisState();
  void handle(Context context, Object argument) { ... }
}
cl _ThatState implements State {
  const _ThatState();
  void handle(Context context, Object argument) { ... }
}

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

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

(916)
卫星数据:在卫星地图上绘制数据(satellite locator map)
上一篇
Cmg电机:Arduino电机坡道
下一篇

相关推荐

  • concord是什么牌子:穿越时空,体验Concord的非凡之美

    Concord是一个美国安全品牌,专门为家庭和企业提供安全产品。它的产品包括家用安全系统、安全监控设备、智能锁、安全门等。代码:CONCORD…

    2023-03-13 11:05:04
    0 49 21
  • cords是什么意思:如何使用Cords来提高生产力

    示例示例Cords是一种常用的设计模式,它允许你把多个函数链接在一起,以便更好地处理复杂的逻辑。代码示例:…

    2023-01-28 07:40:52
    0 56 66
  • java foreach跳出本次循环:使用break语句跳出Java Foreach循环

    Java foreach跳出本次循环可以使用continue语句。continue语句会跳过当前循环中剩余的语句,然后继续下一次循环。…

    2023-01-11 12:12:41
    0 25 67
  • what can i do for you 回答:How Can I Help You?

    这取决于您想要我做什么。我可以帮助您完成一些编程任务,如创建网站,编写脚本,编写应用程序,编写API,编写数据库,编写算法,编写机器学习模型等。我也可以帮助您解决其他技术问题,如调试代码,优化性能,解决安全问题等。例如,我可以为您编写以下代码,以实现某些功能:…

    2023-01-26 13:54:16
    0 51 36
  • mifare classic tool怎么用:使用Mifare Classic Tool来管理你的Mifare Classic卡

    Mifare Classic Tool是一款开源的Android应用程序,它可用于读取和写入Mifare Classic NFC标签。它的主要功能是:…

    2023-02-17 15:24:20
    0 92 43
  • cordic算法详解:实现CORDIC算法的数学原理及其应用

    CORDIC(COordinate Rotation DIgital Computer)算法是一种基于反复旋转的数字算法,可以用来计算几何函数(如正弦、余弦、正切等)和其他复杂函数,因此也被称为旋转算法。它是一种非常有效的算法,可以在很少的时间内实现几何函数的计算。CORDIC算法的基本思想是:通过反复旋转向量,以达到计算几何函数的目的。它的具体步骤如下:…

    2023-01-14 16:01:55
    0 60 62
  • struct和class区别 A Comparison of Their Characteristics and Uses

    示例示例struct和class的主要区别在于:struct是值类型,class是引用类型。…

    2023-01-27 15:29:38
    0 63 44
  • curl 超时时间设置解决网络请求延迟的最佳实践

    示例示例cURL 超时时间设置是指在 cURL 发出请求后,等待服务器响应的最长时间。如果超过了设定的超时时间,则会收到一个超时错误。可以使用 curl_setopt() 函数来设置 cURL 超时时间,该函数的第一个参数是 cURL 资源句柄,第二个参数是 CURLOPT_TIMEOUT,用于设置 cURL 超时时间。…

    2023-02-22 07:17:34
    0 68 81

发表评论

登录 后才能评论

评论列表(17条)