2.Factory - QDDCoder/LZLearniOS GitHub Wiki

工厂设计模式

协议抽象类

/// 协议抽象类
protocol Computer{
    func getRAM() -> String
    func getHDD() -> String
    func getCPU() -> String
}

/// 协议扩展 增加父类的实现方法
extension Computer{
    func toString() -> String {
        return "RAM= "+getRAM()+", HDD="+getHDD()+", CPU="+getCPU()
    }
}

子类中间件

/// 仅仅只是为了 减少代码 编写了中间件
class ComputerCenter: NSObject,Computer {
    /// 内聚的参数
    private var ram:String=""
    private var hdd:String=""
    private var cpu:String=""
    init(withRam ram:String,withHdd hdd:String,withCpu cpu:String) {
        super.init()
        self.ram=ram
        self.hdd=hdd
        self.cpu=cpu
    }
    
    func getRAM() -> String {
        return self.ram
    }
    
    func getHDD() -> String {
        return self.hdd
    }
    
    func getCPU() -> String {
        return self.cpu
    }
}

子类编写

/// 子类
class PC:ComputerCenter {
    
}

/// 子类
class Server:ComputerCenter {

}

工厂类

class ComputerFactory: NSObject {
    override init() {
        super.init()
    }
    
    /// 传入类型和初始化参数构建不同的子类
    /// - Parameters:
    ///   - type: 类型
    ///   - ram: 参数ram
    ///   - hdd: 参数hdd
    ///   - cpu: 参数cpu
    /// - Returns: 抽象的父类
    static func getComputer(withType type:String,withRam ram:String,withHdd hdd:String,withCpu cpu:String) -> Computer {
        if type == "PC" {
            return PC(withRam: ram, withHdd: hdd, withCpu: cpu)
        }else{
            return Server(withRam: ram, withHdd: hdd, withCpu: cpu)
        }
    }
}

测试编写

let pc:Computer = ComputerFactory.getComputer(withType: "PC", withRam: "2GB", withHdd: "500GB", withCpu: "2.4GHz")
        
let server:Computer = ComputerFactory.getComputer(withType: "Server", withRam: "16GB", withHdd: "1TB", withCpu: "2.9GHz")

print("工厂模式PC 配置: \(pc.toString())")
print("工厂模式Server 配置: \(server.toString())")

测试结果

工厂模式PC 配置: RAM= 2GB, HDD=500GB, CPU=2.4GHz
工厂模式Server 配置: RAM= 16GB, HDD=1TB, CPU=2.9GHz
⚠️ **GitHub.com Fallback** ⚠️