工厂模式与多态结合

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

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

例子1:

java 复制代码
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:

Kotlin 复制代码
abstract class IPhoneLinkAdapter(val context: Context) {
    abstract fun getPhoneLinkType(): Int
    abstract 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_AUTO
    override 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
}
相关推荐
Zane199422 分钟前
HashMap 为什么要在长度16、容量必须是2的幂这些细节上较劲
java·后端
长谷深风11135 分钟前
为什么你的 Tool 总被模型选错?
java·大数据·ai·llm·ai agent·工具设计·agent设计
莫得感情 o2 小时前
并发 14 · 收官:虚拟线程与结构化并发
java·并发
聚美智数2 小时前
图片水印-图片剪裁-图片缩放API接口介绍
java·服务器·数据库
明雨-开发2 小时前
Android打包时候Execution failed for task ‘:launcher:lintVitalAnalyzeRelease‘.
android
游戏开发爱好者82 小时前
开心上架是什么,一站式 Apple 开发者工作台总览
android·小程序·https·uni-app·iphone·webview
Android-Flutter2 小时前
android kotlin launch 源码分析
android·kotlin
xierui1231233 小时前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
Android-Flutter3 小时前
android kotlin 状态机 Continuation 详解
android·kotlin
cfm_29143 小时前
Spring AI Tool 调用架构全解
java·人工智能·spring