《王者荣耀》中程序24种设计模式之奥义第一式·简单工厂模式

1,738 阅读2分钟

由来

当你还是一个码农的时候,每天都要编写多少行代码每次都要创建很多类的时候,每建立一次给你一点经验值,累计到十级的时候会发现我写了这很多代码为什么不能复用呢?
这时恭喜您进入转职阶段,由码农转成会放魔法的码农。。。(多么吊炸天技能)
觉醒吧!少年。
以王者荣耀为示例题材,写代码就是打游戏!

入口

代码示例裢接:https://github.com/ruanch/Design-Pattern-For-Swift

进入正题(我在游戏中有一个英雄库,我想买啥就买啥

在游戏里都有一个商店,商店里各种物品,今天以英雄库为例,写模式先从抽象开始,毕竟现在都以面向接口或面向协议开发了。
把英雄抽象成NERole协议,英雄有名字、血量、魔法量、价格,另外有获取该英雄信息方法。
protocol NERole {

    var name:String{ get set }

    var healthPoint:CGFloat{ get set } //血量值

    var magicPoint:CGFloat{ get set } //魔法值

    var price:CGFloat{ get set } //购买价格

    func getRoleInfo() -> String //获取角色属性

}
***接下来英雄按这个协议生成,这里分别召唤出阿珂、关羽、小乔和吕布四位大将。***
//阿珂角色

class NERoleAKe: NSObject,NERole {

    var name: String = ""

    var price: CGFloat = 0.0

    var magicPoint: CGFloat = 0.0

    var healthPoint: CGFloat = 0.0

    func getRoleInfo() -> String {

        return "角色名称:\(name) ==> 血量: \(healthPoint)  魔法量:\(magicPoint) 购买价格:\(price)"

    }

}

//关羽角色

class NERoleGuanYu: NSObject,NERole {

//类似代码

}

//小乔角色

class NERoleXiaoQiao: NSObject,NERole {

//类似代码

}

//吕布角色

class NERoleLvBu: NSObject,NERole {

//类似代码

}
***接下来,我们需要一个工厂来创造出英雄***
class NERoleFactory: NSObject {
    //创建角色
    static func createRole(roleType : String) -> NERole {
        let roles = ["阿珂","关羽","小乔","吕布"]
        let type = roles.index(of: roleType)!
        switch type {
        case 0:
            return NERoleAKe()
        case 1:
            return NERoleGuanYu()
        case 2:
            return NERoleXiaoQiao()
        case 3:
            return NERoleLvBu()
        default:
            return NERoleAKe()
        }
    }
}
***客户端代码:***

var role:NERole = NERoleFactory .createRole(roleType: "阿珂")

role.name = "阿珂"

role.healthPoint = 100.0

role.magicPoint = 50.0

role.price = 13888.0

print(role.getRoleInfo())

var role1:NERole = NERoleFactory .createRole(roleType: "关羽")

role1.name = "关羽"

role1.healthPoint = 100.0

role1.magicPoint = 50.0

role1.price = 18888.0

print(role1.getRoleInfo())

打印结果:

角色名称:阿珂 ==> 血量: 100.0 魔法量:50.0 购买价格:13888.0

角色名称:关羽 ==> 血量: 100.0 魔法量:50.0 购买价格:18888.0

总结一下

传入相应的英雄名称就可以获取英雄实例出来,看下简单工厂的关系图

WechatIMG1097.jpeg

下一篇

《王者荣耀》中程序24种设计模式之奥义第二式·工厂方法模式:juejin.cn/post/708886…