完整代码示例:
// 商品接口定义 interface IProduct { fun getName(): String; fun getPrice(): Float; } // 具体商品实现 - 冰箱 class Fridge implements IProduct { override fun getName(): String { return "Fridge"; } override fun getPrice(): Float { return 1500.0f; } } // 具体商品实现 - 电视 class Television implements IProduct { override fun getName(): String { return "Television"; } override fun getPrice(): Float { return 800.0f; } } // 用户类 - 展示依赖倒置原则的应用 class Customer(private var product: IProduct?) { constructor() : this(null); // 设置商品的方法注入 fun setProduct(product: IProduct) { this.product = product; } // 获取商品名称 fun getProductName(): String? { if (this.product != null) { return this.product?.getName(); } return "No Product Selected"; } // 计算总价 fun calculateTotalPrice(quantity: Int): Float { if (this.product != null && quantity > 0) { return this.product.getPrice() * quantity.toFloat(); } return 0.0f; } } // 主程序入口 fun main(args: Array<String>) { val fridge = Fridge(); // 创建冰箱实例 val television = Television(); // 创建电视实例 println("Fridge Name: ${fridge.getName()} Price: $${fridge.getPrice()}"); println("Television Name: ${television.getName()} Price: $${television.getPrice()}"); // 初始化客户并设置初始商品为冰箱 val customer = Customer(fridge); // 输出当前商品信息 println("\nCustomer's Current Product:"); println("Name: ${customer.getProductName()}, Total Price for 3 items: $$${customer.calculateTotalPrice(3)}"); // 更改商品为电视并通过 setter 注入 customer.setProduct(television); // 输出更改后的商品信息 println("\nAfter Changing to Television:"); println("Name: ${customer.getProductName()}, Total Price for 5 items: $$${customer.calculateTotalPrice(5)}"); }