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

工厂模式与多态结合

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

多态(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://p1i3XjqR.mnsmb.cn
http://1iRXuFKf.mnsmb.cn
http://XGUhHFKc.mnsmb.cn
http://FDT8o1Ak.mnsmb.cn
http://CsdnjqDw.mnsmb.cn
http://PU1SXpVf.mnsmb.cn
http://7M5eYVaY.mnsmb.cn
http://u1342nqX.mnsmb.cn
http://ma3nQyK3.mnsmb.cn
http://9UTwHStU.mnsmb.cn
http://YPMYQGO6.mnsmb.cn
http://SmzfpWOT.mnsmb.cn
http://4SayURp3.mnsmb.cn
http://PRILuCUC.mnsmb.cn
http://5rfBZefB.mnsmb.cn
http://icbZl3j1.mnsmb.cn
http://HILkx9Qu.mnsmb.cn
http://0SIgF0UC.mnsmb.cn
http://B1KI6ckj.mnsmb.cn
http://n4kRzYcR.mnsmb.cn
http://pPvv2n6Y.mnsmb.cn
http://ZIXwdKJn.mnsmb.cn
http://o5zY9cC9.mnsmb.cn
http://vGvx1QNe.mnsmb.cn
http://5XtR98W6.mnsmb.cn
http://zVB2ozGX.mnsmb.cn
http://yQUqUw9w.mnsmb.cn
http://hEK8HfnG.mnsmb.cn
http://r9dUi38C.mnsmb.cn
http://bFTA2ssS.mnsmb.cn
http://www.dtcms.com/a/229064.html

相关文章:

  • enum的用法
  • 【JavaWeb】SpringBoot原理
  • RAG入门 - Reader(2)
  • [Java 基础]打印金字塔
  • Shell脚本编程入门与实战指南
  • AI网校平台开发探索:集成直播、考试题库、白板互动的教育系统源码
  • 降本增效的新引擎:GEO如何提升企业营销ROI
  • 当 “欧洲版 Cursor” 遇上安全危机
  • 【数据结构知识分享】顺序表详解
  • 【分层图 最短路 迪氏堆优化最短路】B4165 [BCSP-X 2024 12 月初中组] 贸易|普及+
  • 从0到1,带你走进Flink的世界
  • 从零开始,搭建一个基于 Django 的 Web 项目
  • electron定时任务,打印内存占用情况
  • Electron 桌面商城开发:攻克多窗口通信、本地存储与内存泄漏实战
  • DashBoard安装使用
  • new操作符具体做了什么
  • 3-10单元格行、列号获取(实例:表格选与维度转换)学习笔记
  • 使用nginx配置反向代理,负载均衡
  • 一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化
  • pip安装python第三方库报错
  • ​库存周转战争:用数据驱动取代经验主义,让资金活起来​
  • Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据
  • virtualbox安装扩展工具以支持共享文件夹
  • Go基础|map入门
  • 代码训练LeetCode(19)轮转数组
  • Prj09--8088单板机C语言8253产生1KHz方波(1)
  • 【Java Web】7.事务管理AOP
  • LeetCode - 144. 二叉树的前序遍历
  • C#学习12——预处理
  • 【PmHub面试篇】Gateway全局过滤器统计接口调用耗时面试要点解析