鸿蒙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 小时前
【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限
pytorch·华为·harmonyos
xo198820115 小时前
鸿蒙人脸识别
redis·华为·harmonyos
塞尔维亚大汉6 小时前
【OpenHarmony】 鸿蒙 UI开发之CircleIndicator
harmonyos·arkui
BisonLiu6 小时前
华为仓颉鸿蒙HarmonyOS NEXT仓颉原生数据网络HTTP请求(ohos.net.http)
harmonyos
BisonLiu6 小时前
华为仓颉鸿蒙NEXT原生加解密算法库框架
harmonyos
变色龙云6 小时前
网页生成鸿蒙App
华为·harmonyos
BisonLiu6 小时前
华为仓颉鸿蒙HarmonyOS NEXT仓颉原生ohos.request(上传下载)
harmonyos
s_daqing6 小时前
华为手机鸿蒙4.2连接不上adb
华为·智能手机·harmonyos
Lucky me.6 小时前
鸿蒙开发使用axios请求后端网络服务出现该错误
华为·harmonyos
_Shirley6 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙