鸿蒙next ArkUI 单例模式和手游sdk接口设计

前言:

各位同学大家,有段时间没有跟大家见面了,因为最近一直在更新鸿蒙的那个实战课程所以就没有去更新文章实在是不好意思, 所以今天就给大家更新一起鸿蒙里面的案例模式来给大家做一个分享。

作者:徐庆

团队:坚果派 公众号:"大前端之旅" 润开鸿生态技术专家,华为HDE,CSDN博客专家,CSDN超级个体,CSDN特邀嘉宾,InfoQ签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合作。

单例模式

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例的目的

我们在面向对象编程过程如果要要去访问一个类里面方法 最简单的办法就是拿到当前类的实例 然后去调用里面对外的方法 但是我们不能每次都去new一下吧这样 每次都创建新的实例 其实是影响我们的性能开销。所以我们要使用单例模式。

具体实现
1 定义一个静态变量
csharp 复制代码
public  static instance: GameSdk | null = null
2 定义一个 getInstance() 来获取我们的唯一实例
csharp 复制代码
public  static getInstance() {
   if (!GameSdk.instance) {
     GameSdk.instance = new GameSdk()
   }
   return GameSdk.instance
 }
constructor 设置为私有
csharp 复制代码
private  constructor() {

}

我们讲 constructor 私有后我们再去直接new 对象就会报错。这样就会很好规避我们多次创建实例。

手游sdk接口设计

一共有以下几个方法

csharp 复制代码
public  init(){
  Logger.error("GameSdk --> init")
}
public  login(){
  Logger.error("GameSdk --> login")
}
public  servicelogin(){
  Logger.error("GameSdk --> servicelogin")
}
public  updateroleinfo(){
  Logger.error("GameSdk --> updateroleinfo")

}

public  pay(){
  Logger.error("GameSdk --> pay")
}

public  exitgame(){
  Logger.error("GameSdk --> exitgame")
}

生命周期方法

typescript 复制代码
public aboutToAppear(){

  Logger.error("GameSdk --> aboutToAppear")

}

public  onPageShow(){

  Logger.error("GameSdk --> onPageShow")

}

public aboutToDisappear(){
  Logger.error("GameSdk --> aboutToDisappear")

}

public  onPageHide(){

  Logger.error("GameSdk --> onPageHide")
}

onBackPress(){
  Logger.error("GameSdk --> onBackPress")

}

单例模式测试

我们写了几个button 去调用我们 GameSdk 里面的方法

具体代码
scss 复制代码
build() {
  Column(){
      Button('初始化')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
         GameSdk.getInstance().init();
      })
    Button('登录')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
        GameSdk.getInstance().login();
      })
    Button('区服登录上报')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
        GameSdk.getInstance().servicelogin();
      })
    Button('角色等级上报')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
        GameSdk.getInstance().updateroleinfo();
      })

    Button('支付')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
        GameSdk.getInstance().pay();
      })
    Button('退出游戏')
      .height(45)
      .margin({top:45})
      .onClick(()=>{
        GameSdk.getInstance().exitgame();

      })

  }.width('100%')
  . height('100%')
}

我们查看打印日志 每个方法都可以正常调用到

最后总结:

鸿蒙 ArkUI 里面单例模式跟我们Java 还有oc代码里面比较像。都是需要私有化我们一个构造方法之类的做法 使得我们不能从外部直接通过new关键字来获取我们的实例 而是要通过我们的定义方法来获取唯一实例。从而减少系统开销避免重复创建实例。 最后呢 希望我都文章能帮助到各位同学工作和学习 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 谢谢

相关推荐
奔跑的露西ly5 小时前
【HarmonyOS NEXT】沉浸式页面实现
华为·harmonyos
小Tomkk5 小时前
我开发的一款鸿蒙游戏《猜数字大师》 应用介绍 和技术架构
游戏·华为·harmonyos
鸿蒙开发工程师—阿辉5 小时前
HarmonyOS 5 数据持久化:状态持久化 (PersistentStorage)
华为·harmonyos
音浪豆豆_Rachel6 小时前
Flutter鸿蒙化之深入解析Pigeon可空返回与参数设计:nullable_returns.dart全解
flutter·harmonyos
音浪豆豆_Rachel7 小时前
Flutter鸿蒙跨平台测试策略解析:从基础Widget测试到平台集成验证
flutter·harmonyos
音浪豆豆_Rachel7 小时前
Flutter鸿蒙跨平台通信协议解析:Pigeon生成的Dart端桥接艺术
flutter·华为·harmonyos
鸿蒙开发工程师—阿辉7 小时前
HarmonyOS 5 数据持久化:首选项 (Preferences)
华为·harmonyos
子榆.7 小时前
Flutter 与开源鸿蒙(OpenHarmony)分布式能力实战:基于软总线实现跨设备协同
flutter·开源·harmonyos
鸿蒙开发工程师—阿辉7 小时前
HarmonyOS 5 上下文的使用:AbilityContext 的使用
华为·harmonyos