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

相关推荐
wordbaby6 小时前
脱离 Tab 栏的艺术:React Native 全屏子页面的导航架构实践
前端·react native·harmonyos
程序猿追7 小时前
在 HarmonyOS 模拟器上种出斐波那契螺旋线
大数据·人工智能·microsoft·华为·harmonyos
wordbaby7 小时前
React Native 新架构落地鸿蒙:跨三端政务级应用的工程实践与深度复盘
前端·react native·harmonyos
lqj_本人8 小时前
鸿蒙electron框架PC适配:ExifCleaner 适配鸿蒙全过程:一次从“能启动”到“能处理文件”的完整复盘
华为·electron·harmonyos
HarmonyOS_SDK13 小时前
应用内隐私信息被窥视?防窥保护自动感知一键防护
harmonyos
HMSCore13 小时前
应用内隐私信息被窥视?防窥保护自动感知一键防护
harmonyos
nashane14 小时前
HarmonyOS 6学习:水平仪气泡移动方向错误的完整分析与修复方案
人工智能·华为·harmonyos
小雨青年14 小时前
鸿蒙 HarmonyOS 6 | Pura X Max 鸿蒙原生适配 11:分屏窗口下布局自动降级
华为·harmonyos
松☆15 小时前
用昇腾NPU给鸿蒙设备跑推理,全流程实录
华为·harmonyos
nashane15 小时前
HarmonyOS 6学习:异步操作中Toast提示框消失之谜与UIContext解决方案实战
学习·华为·harmonyos