前言:
各位同学大家,有段时间没有跟大家见面了,因为最近一直在更新鸿蒙的那个实战课程所以就没有去更新文章实在是不好意思, 所以今天就给大家更新一起鸿蒙里面的案例模式来给大家做一个分享。
作者:徐庆
团队:坚果派 公众号:"大前端之旅" 润开鸿生态技术专家,华为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关键字来获取我们的实例 而是要通过我们的定义方法来获取唯一实例。从而减少系统开销避免重复创建实例。 最后呢 希望我都文章能帮助到各位同学工作和学习 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 谢谢