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

相关推荐
李游Leo5 小时前
HarmonyOS 7 API 26 升级适配实战:API Change Assistant、targetSDKVersion 与兼容性回归
harmonyos
OH_TPC5 小时前
HarmonyOS APP开发---"智泊"智能停车App,需要用到这个库
harmonyos
用户117910488336 小时前
AI粘贴多行需求为什么会误执行?hmharness安全粘贴拆解 GitHub:swsgbl/hmharness
ai编程·harmonyos
用户0934077735146 小时前
HarmonyOS WPS Open SDK 实践:从 HAR 集成到 OpenFileRequest 最小闭环
typescript·harmonyos
威哥爱编程13 小时前
HarmonyOS 7 Fast Kit 算法加速实战:四大核心能力,把算力从系统里"借"出来
harmonyos·arkts
威哥爱编程13 小时前
HarmonyOS 7 游戏快启实战:Graphics Accelerate Kit 内存镜像秒级启动 + 预启动,把读条变成"秒进"
harmonyos·arkts
木子雨廷13 小时前
第 19 天|Preferences:轻量缓存与状态恢复
harmonyos
威哥爱编程13 小时前
HarmonyOS 7 精准碰一碰实战:识别触碰坐标,素材精准插入指定位置
harmonyos
二流小码农13 小时前
鸿蒙开发:ArrayList,可不会让UI更新哦
android·ios·harmonyos
威哥爱编程13 小时前
HarmonyOS 7 数字盾 2.0 实战:可信数字签名、可信 UI 确认与可信输入
harmonyos