当前位置: 首页 > 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://www.lqws.cn/news/87841.html

相关文章:

  • Rhino插件大全下载指南:解锁犀牛潜能,提升设计效率
  • llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解一
  • Spring AOP:面向切面编程 详解代理模式
  • JavaSec | SpringAOP 链学习分析
  • 【 java 集合知识 第一篇 】
  • 网络攻防技术七:计算机木马
  • git管理
  • Linux 环境下高效视频切帧的实用指南
  • ES6 Promise 状态机
  • 在linux系统上搭建git服务器(ssh协议)
  • k8s的出现解决了java并发编程胡问题了
  • sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
  • 【leetcode】20. 有效的括号
  • 代码训练LeetCode(19)轮转数组
  • Axure-元件流程图
  • python,shell,linux,bash概念的不同和对比联系
  • 运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录
  • 当 “欧洲版 Cursor” 遇上安全危机
  • Python趣学篇:从零打造智能AI井字棋游戏(Python + Tkinter + Minimax算法)
  • K8S上使用helm部署 Prometheus + Grafana
  • 高考数学易错考点01 | 临阵磨枪
  • Go Gin框架深度解析:高性能Web开发实践
  • react native webview加载本地HTML,解决iOS无法加载成功问题
  • 如何轻松地将数据从 iPhone传输到iPhone 16
  • React Native图片预加载:让你的应用图片预览像德芙一样丝滑
  • vue3学习
  • dvwa7——SQL Injection
  • TypeScript中class的两种继承方式extends和implements的对比
  • Hadoop 3.x 伪分布式 8088端口无法访问问题处理
  • 【Java实用工具类】手撸SqlBuilder工具类,优雅拼接动态SQL,MyBatisPlus同款风格!