当前位置: 首页 > 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
}

相关文章:

  • 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第三方库报错
  • 网站建设项目预算/公众号seo排名优化
  • 网站建设用什么网站好一点/网站运营推广方案
  • 手机微网站与微官网/国外网站seo免费
  • 成都市做网站的公司/新网店怎么免费推广
  • 看网站是不是WP做的/口碑营销的概念是什么
  • 门户网站网页设计/网站seo快速