| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 创建型模式之一建造者模式在kotlin中的应用 -> 正文阅读 |
|
[移动开发]创建型模式之一建造者模式在kotlin中的应用 |
????????不用设计模式我们开发出来的程序照样能用,那为什么我们还要用设计模式呢?设计模式在开发中有什么作用呢?使用设计模式和不使用设计模式的程序有什么不同呢?等等这一系列的问题,相信每个初学者甚至从事多年开发的Coder都会这样的疑问(地基打不好,房子能建好?(码字不容易,不喜勿喷哈!推荐个俱乐部:KotlinClub));设计模式的六大原则: 一、单一职责原则,实现类要职责单一 ? ? ? 我就这一个任务,把这一个任务干好就行,别让其他人影响我,我想轻松的活着; 二、里氏替换原则,不要破坏继承体系 ? ? ? ? 要想继承老子的财产,必须按着老子的来,否则别想集成? ? ? ?? 三、依赖倒置原则,要面向接口编程 ????????高层模块不应该依赖底层模块,二者都该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象? ? ? ?? 四、接口隔离原则,在设计接口的时候要精简单一 ? ? ? ?吃喝玩乐样样在行,干别的还是再找个人吧! 五、迪米特原则,要降低耦合 ?????????我就认识你,就你给我谈,别人不行! 六、开闭原则,要对扩展开放,对修改关闭 ? ? ? ? 老子就这么点财产,想要更多钱自己整去!? ? ? ?? ? ? ? ?以上对原则的介绍有点xx,但凡识字就应该能理解啥意思吧,实在不懂,我也没法了;每个人可能对设计原则有不同的理解,但是万变不离其宗,都是建房子前需要打的地基,地基越牢,盖的越高;?这些原则在开发中发挥着一定的作用,有优点也有不足,我们在使用的时候就需要根据当前场景选择最合适的原则了;基于这些设计原则,衍生出了设计模式,每一种设计模式都遵循着对应的设计原则,原则就六条,但是设计模式却有23种;555。。。。。。整那么多条条框框干啥呢!不都说九九归一,返璞归真吗?为啥还要那么麻烦?(盖房子不打地基,房子能盖起来不?) ? ? ? ? 设计模式分为三大类,二十三小类(不要问我谁分的,我也不知道): ? ? ? ? 创建性:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 ? ? ? ? 结构性:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ? ? ? ? 行为性:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 ? 这些设计模式就是程序的地基,一旦打好地基想怎么造就怎么造; 扯了这么多,进入正题:创建型模式之一建造者模式在kotlin中的应用: The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations. ? ? ? ? 建造者模式在哪使用都是发挥这同样的作用,本质不变嘛!在我看来也就在代码风格上有些不同,kotlin在coding的时候更简洁,调用的时候更方便而已;下面分别使用kotlin写了一个打开小程序的工具类,这个工具类使用了建造者模式: class WXMiniLaunchUitls( activity: AppCompatActivity, appId: String, userName: String, appPath: String, appType: String ) { companion object { val MINIPTOGRAM_TYPE_RELEASE = "0" val MINIPTOGRAM_TYPE_DEBUG = "1" val MINIPTOGRAM_TYPE_REVIEW = "2" } private val mActivity = WeakReference(activity) private val mAppId: String = appId private val mUserName: String = userName private val mAppPath: String = appPath private val mAppType: String = appType @SuppressLint("Recycle") fun openMini() { val resolver: ContentResolver = mActivity.get()!!.contentResolver val uri = Uri.parse("content://com.tencent.mm.sdk.comm.provider/launchWXMiniprogram") val path = arrayOf(mAppId, mUserName, mAppPath, mAppType, "") var cursor: Cursor if (resolver.query(uri, null, null, path, null).also { cursor = it!! } != null) { cursor.close() } } class Builder { var appId: String = "" var userName: String = "" var appPath: String = "" var appType: String = "" fun setAppId(appId: String): Builder { this.appId = appId return this } fun setUserName(userName: String): Builder { this.userName = userName return this } fun setAppPath(appPath: String): Builder { this.appPath = appPath return this } fun setAppType(appType: String): Builder { this.appType = appType return this } fun build(activity: AppCompatActivity): WXMiniLaunchUitls { return WXMiniLaunchUitls(activity, appId, userName, appPath, appType) } } } 调用时不再使用new关键字,类似于直接调用静态方法: WXMiniLaunchUitls.Builder().setAppId("") .setUserName("") .setAppPath("") .setAppType(WXMiniLaunchUitls.MINIPTOGRAM_TYPE_DEBUG) .build(this) .openMini() ? ? ? ? 这只是最基本的一种建造者模式实现方式,看出来跟Java有什么不同吗?变量的声明?对象的实例化?kotlin一直不温不火的,出世那么久,也就刚出来的时候比较火,难道它不值得用?我不这么认为,当你使用习惯了kotlin,你会发现爱不释手,不再想使用Java,kotlin的特性那么多,还是多多研究研究吧! ? ? ? ? 看到这里有人就会有这样的疑惑,一个工具类而已,至于使用设计模式吗?至不至于嘛!说实话,项目中我会使用设计模式,但是不会使用建造者模式,可能会使用单例模式,至于为啥你就细品吧!这个类也就我随便建的,今天主要说建造者模式:建造者模式最常见的使用者就是dialog,通过调用builder设置不同的属性,只需要设置用到的,不需要用的属性爱咋地咋地,有这个场景的你就可以考虑是否使用建造者模式了;设计模式的存在让我们的代码更健壮,易维护,让程序更加稳定。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:23:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |