鸿蒙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关键字来获取我们的实例 而是要通过我们的定义方法来获取唯一实例。从而减少系统开销避免重复创建实例。 最后呢 希望我都文章能帮助到各位同学工作和学习 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 谢谢

相关推荐
逆回1 天前
给鸿蒙手机做一只 3D 宠物:五个把我卡住的问题
harmonyos
钉先生贾1 天前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错2 天前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户117910488332 天前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos
redtank20002 天前
纯血鸿蒙小工具三件套实测:弹幕手持、爱记录与仓库管理软件
学习·华为·智能手机·harmonyos
用户86194177207412 天前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos
HarmonyOS_SDK2 天前
【HarmonyOS SDK Skills】挂载 Agent Skill,轻松跑通鸿蒙应用广告变现
harmonyos
闫东阳LordGalaxy2 天前
给小艺装上数学能力:数易 App 接入智能体 FunctionComponent 与 A2A 双通路实战
harmonyos
Dream-Y.ocean3 天前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
OH_TPC3 天前
HarmonyOS APP开发---"好物清单"购物清单App,需要用到这个库
harmonyos