当前位置: 首页 > article >正文

工厂模式与多态结合

工厂模式与多态的结合是平台化项目中实现灵活架构的核心技术之一。这种组合能够创建可扩展、易维护的系统架构。

多态(Polymorphism)指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

例子1:

public abstract class PaymentProcessor {public abstract void process(Payment payment);
}public class CreditCardProcessor extends PaymentProcessor {public void process(Payment payment) { /* 信用卡处理逻辑 */ }
}public class PayPalProcessor extends PaymentProcessor {public void process(Payment payment) { /* PayPal处理逻辑 */ }
}public class PaymentProcessorFactory {public static PaymentProcessor create(String type) {switch(type) {case "creditcard": return new CreditCardProcessor();case "paypal": return new PayPalProcessor();default: throw new IllegalArgumentException();}}
}// 使用
PaymentProcessor processor = PaymentProcessorFactory.create("creditcard");
processor.process(payment);

例子2:

abstract class IPhoneLinkAdapter(val context: Context) {abstract fun getPhoneLinkType(): Intabstract fun getPhoneLinkName(): String
}abstract class ICarPlayLinkAdapter(context: Context) : IPhoneLinkAdapter(context) {override fun getPhoneLinkType() = PhoneLinkType.CARPLAY
}abstract class IAndroidAutoLinkAdapter(context: Context) : IPhoneLinkAdapter(context) {override fun getPhoneLinkType() = PhoneLinkType.ANDROID_AUTOoverride fun getPhoneLinkName() = context.getString(R.string.androidauto)
}class ACarPlayLinkAdapter(context: Context) : ICarPlayLinkAdapter(context) {override fun getPhoneLinkName() = context.getString(R.string.carplay_a)
}class BCarPlayLinkAdapter(context: Context) : ICarPlayLinkAdapter(context) {override fun getPhoneLinkName() = context.getString(R.string.carplay_b)
}class AAndroidAutoLinkAdapter(context: Context) : IAndroidAutoLinkAdapter(context) {
}class BAndroidAutoLinkAdapter(context: Context) : IAndroidAutoLinkAdapter(context) {
}object PhoneLinkAdapterFactory {fun getPhoneLinkAdapters(context: Context): HashSet<IPhoneLinkAdapter> {val linkAdapters = HashSet<IPhoneLinkAdapter>()if (条件1) {linkAdapters.add(ACarPlayLinkAdapter(context))} else if (条件2) {linkAdapters.add(BCarPlayLinkAdapter(context))} if (条件3) {linkAdapters.add(AAndroidAutoLinkAdapter(context))} else if (条件4) {linkAdapters.add(BAndroidAutoLinkAdapter(context))} return linkAdapters}
}//使用
internal val linkAdapters by lazy { PhoneLinkAdapterFactory.getPhoneLinkAdapters(mContext) }fun getPhoneLinkName(phoneLinkType: Int): String {return getPhoneLinkAdapter(phoneLinkType)?.getPhoneLinkName() ?: ""
}internal fun getPhoneLinkAdapter(phoneLinkType: Int): IPhoneLinkAdapter? {return linkAdapters.find { it.getPhoneLinkType() == phoneLinkType }
}fun isWirelessConnected(): Boolean {linkAdapters.forEach {if (it.isWirelessConnected()) {return true}}return false
}

http://www.lryc.cn/news/2399304.html

相关文章:

  • 无人机巡检智能边缘计算终端技术方案‌‌——基于EFISH-SCB-RK3588工控机/SAIL-RK3588核心板的国产化替代方案‌
  • 相机--相机成像原理和基础概念
  • 2025-0604学习记录17——文献阅读与分享(2)
  • 图解浏览器多进程渲染:从DNS到GPU合成的完整旅程
  • 【计算机网络】第3章:传输层—TCP 拥塞控制
  • idea不识别lombok---实体类报没有getter方法
  • 【Hive入门】
  • 亚马逊站内信规则2025年重大更新:避坑指南与合规策略
  • 01 - AI 时代的操作系统课 [2025 南京大学操作系统原理]
  • 数组1 day7
  • SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules
  • Redis中的过期策略与内存淘汰策略
  • 基于SDN环境下的DDoS异常攻击的检测与缓解
  • HarmonyOS 实战:给笔记应用加防截图水印
  • 如何轻松地将文件从 PC 传输到 iPhone?
  • 前端面试二之运算符与表达式
  • 【运维实战】使用Nvm配置多Node.js环境!
  • Bresenham算法
  • 【从GEO数据库批量下载数据】
  • day 44
  • 鸿蒙OSUniApp开发跨平台AR扫描识别应用:HarmonyOS实践指南#三方框架 #Uniapp
  • NER实践总结,记录一下自己实践遇到的各种问题。
  • 微信小程序实现运动能耗计算
  • iTunes 无法备份 iPhone:10 种解决方法
  • 施耐德特价型号伺服电机VIA0703D31A1022、常见故障
  • LangChain4J 使用实践
  • 慢SQL调优(二):大表查询
  • 【C++】—— 从零开始封装 Map 与 Set:实现与优化
  • 内网穿透之Linux版客户端安装(神卓互联)
  • 开疆智能Profinet转Profibus网关连接CMDF5-8ADe分布式IO配置案例