由来
当你还是一个码农的时候,每天都要编写多少行代码每次都要创建很多类的时候,每建立一次给你一点经验值,累计到十级的时候会发现我写了这很多代码为什么不能复用呢?
这时恭喜您进入转职阶段,由码农转成会放魔法的码农。。。(多么吊炸天技能)
觉醒吧!少年。
以王者荣耀为示例题材,写代码就是打游戏!
入口
代码示例裢接: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
总结一下
传入相应的英雄名称就可以获取英雄实例出来,看下简单工厂的关系图
下一篇
《王者荣耀》中程序24种设计模式之奥义第二式·工厂方法模式:juejin.cn/post/708886…