Android开发需要知道的5个设计模式

2023-11-08

设计模式是软件设计中给定上下文中常见问题的通用、可重用解决方案。
设计模式是对经常出现的问题的解决方案。
设计模式不是成品,相反,它们是可以根据上下文应用于多种情况的模板,并且可以随着时间的推移进行改进,从而成为非常强大的软件工程工具。设计模式可帮助开发人员实施经过验证且被广泛采用的解决方案。它有助于提高开发速度,并且使用设计模式模板更快地开发解决方案可以提高编码效率、可维护性和代码可读性。

设计模式的类型:
以下是不同类型的设计模式:
创意设计模式
结构设计模式
行为设计模式。

  1. 创造性:
    这些模式是为创建对象或类的方式而设计的。
    2.结构:
    这些模式是针对类的结构和组成而设计的。
    3.行为:
    这些模式的设计取决于一个类与其他类的通信方式。
    Android 开发者的设计模式:
    Android 是一个移动开发者平台,它还提供 API 来开发手表和嵌入式系统的应用程序。就像你是一个安卓开发者一样,你应该知道常见的简单设计模式。
    模式 1 单例模式:
    这种创建设计模式有助于在应用程序上下文中实例化对象一次且仅一次。单例是一个类,它只允许创建其自身的单个实例并允许访问该创建的实例。当您要创建数据库连接对象以从应用程序创建一个且唯一的会话时,这很有用。
    记住以下几点:
    私有构造函数
    其类的静态引用
    一种静态方法
    可全局访问的对象引用
    跨多个线程的一致性
    例子:
    publicclassSingletonInstance{//A static reference of its classprivatestaticSingletonInstanceinstance=null;//private constructorprivateSingletonInstance(){}//One static method//Globally accessible object referencepublicstaticSingletonInstancegetInstance(){if(instancenull){//Consistency across multiple threadssynchronized(SingletonInstance.class){if(instancenull){instance=newSingletonInstance();}}}returninstance;}}
    模式 2 工厂:
    这也是一种创造设计模式。这确保子类应该决定如何实例化对象。我们在不向客户端公开创建逻辑的情况下创建对象,并且客户端使用相同的通用接口来创建新类型的对象。您可以拥有任意数量的类,但这些隐藏和对象是使用接口或抽象类创建的。
    记住以下几点:
    执行。
    创建一个接口。
    创建实现相同接口的具体类。
    创建工厂以根据输入生成具体类的对象。
    使用工厂获取具体类的对象。
    例子:
    //CarType.javapublicenumCarType{SMALL,SEDAN,LUXURY}//Car.javapublicabstractclassCar{publicCar(CarTypemodel){this.model=model;arrangeParts();}privatevoidarrangeParts(){// Do one time processing here}protectedabstractvoidconstruct();privateCarTypemodel=null;publicCarTypegetModel(){returnmodel;}publicvoidsetModel(CarTypemodel){this.model=model;}}//LuxuryCar.javapublicclassLuxuryCarextendsCar{LuxuryCar(){super(CarType.LUXURY);construct();}@Overrideprotectedvoidconstruct(){System.out.println(“Building luxury car”);}}//SmallCar.javapublicclassSmallCarextendsCar{SmallCar(){super(CarType.SMALL);construct();}@Overrideprotectedvoidconstruct(){System.out.println(“Building small car”);}}
    模式 3 构建器模式:
    构建器模式旨在将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。它用于逐步构造一个复杂的对象,最后一步将返回该对象。构建器模式是一种设计模式,旨在为各种对象创建问题提供灵活的解决方案。
    记住以下几点:
    私有构造函数
    通常称为 Builder 的内部类
    函数为每个字段设置字段值返回
    主类的函数构建返回实例
    示例 Kotlin:
    classHamburgerprivateconstructor(valcheese:Boolean,valbeef:Boolean,valonions:Boolean){classBuilder{privatevarcheese:Boolean=trueprivatevarbeef:Boolean=trueprivatevaronions:Boolean=truefuncheese(value:Boolean)=apply{cheese=value}funbeef(value:Boolean)=apply{beef=value}funonions(value:Boolean)=apply{onions=value}funbuild()=Hamburger(cheese,beef,onions)}}
    模式 4 适配器模式:
    作为一名安卓开发者,你可能已经使用过这种设计模式。这就像 android 开发者的日生技计。适配器模式充当两个不兼容接口之间的桥梁。这种模式涉及一个单一的类,该类负责连接独立或不兼容接口的功能。通过一个真实的示例,您可以将此模式映射到您的手机充电器适配器。这是结构设计模式的类型。
    interfaceBird{publicvoidfly();publicvoidmakeSound();}classSparrowimplementsBird{publicvoidfly(){System.out.println(“Flying”);}publicvoidmakeSound(){System.out.println(“Chirp Chirp”);}}interfaceToyDuck{// target interface// toyducks dont fly they just make// squeaking soundpublicvoidsqueak();}classPlasticToyDuckimplementsToyDuck{publicvoidsqueak(){System.out.println(“Squeak”);}}classBirdAdapterimplementsToyDuck{// You need to implement the interface your// client expects to use.Birdbird;publicBirdAdapter(Birdbird){this.bird=bird;}publicvoidsqueak(){bird.makeSound();}}
    模式5 外观模式:
    外观设计模式是企业开发中非常重要的设计模式。外观模式提供了一个更高级别的接口,使一组其他接口更易于使用。
    Facade 定义了一个新的接口,而 Adapter 使用了一个旧的接口。Facade 处理接口,而不是实现。
    例子:
    publicinterfaceLaptopShop{publicvoidmodelNo();publicvoidprice();}publicclassDellLaptopimplementsLaptopShop{@OverridepublicvoidmodelNo(){System.out.println(" Dell 6 “);}@Overridepublicvoidprice(){System.out.println(” Rs 65000.00 “);}}publicclassLenovoimplementsLaptopShop{@OverridepublicvoidmodelNo(){System.out.println(” Lenovo 3 “);}@Overridepublicvoidprice(){System.out.println(” Rs 45000.00 ");}}publicclassShopKeeper{privateLaptopShopdell;privateLaptopShoplenovo;publicShopKeeper(){dell=newDellLaptop();lenovo=newLenovo();}publicvoiddellSale(){dell.modelNo();dell.price();}publicvoidlenovoSale(){lenovo.modelNo();lenovo.price();}}

结论:
在这篇文章中,我试图解释一个你需要知道的非常基本的列表。本文并不仅仅声称这些设计模式很重要,但这些是您应该熟悉的基础知识。
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向才能达到有效的学习效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android开发需要知道的5个设计模式 的相关文章

  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 为什么将函数参数声明为最终的?

    我目前正在阅读 Sams 出版的 24 小时自学 Android 应用程序开发 一书 我对 Java Android 或其他方面还比较陌生 我对 ActionScript 3 有非常扎实的背景 它与 Java 有足够的相似之处 因此该语言本
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • (Ionic 2)尝试回退到 Cordova-lib 执行时发生错误:TypeError:无法读取未定义的属性“then”

    Edit 使用 ionic 2 时会发生这种情况 我知道它还不稳定 但我认为可能有一些解决方案 因为其他人似乎没有遇到这个问题 Edit end 由于某种原因 我在尝试使用 ionic build android 和 ionic build
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 从 Firebase 数据库填充微调器

    public class MainActivity extends AppCompatActivity DatabaseReference reference Spinner areaSpinner ArrayList
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来

随机推荐