厦门app开发网站开发公司电话,网站建设哪个好一些,网站建设匠人匠心科技,广州各区风险区域最新动态1、模式标准
模式名称#xff1a;工厂方法模式
模式分类#xff1a;创建型
模式意图#xff1a;定义一个用于创建对象的接口#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
结构图#xff1a; 适用于#xff1a;
1、当一个类不知道它…1、模式标准
模式名称工厂方法模式
模式分类创建型
模式意图定义一个用于创建对象的接口让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
结构图 适用于
1、当一个类不知道它所必须创建的对象的类的时候
2、当一个类不希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类中的某一个并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 2、分析与设计
游戏中我们经常会创建一些单位对象这些单位对象一般数量都比较大比如士兵地板特效等等
而且这些单位都有一个特点就是需要有一个“单位池”来进行回收再利用。在这个游戏框架中所有的单位都统称为Item。管理这些的工厂叫ItemManager。比如生产单位UnitItem工厂为UnitItemManager生产特效单位EffectItem工厂为EffectItemManager 3、开始打造 import { IItem } from ./IItem;export interface IItemManager {createItem(itemNo: string): IItemremoveItem(item: IItem): void
} export class UnitItemManager implements IItemManager {nextItemId 0;generateUnitItemId(): number {return this.nextItemId;}// 设计模式1(工厂方法)createItem(unitNo: string): UnitItem {let nodepool xhgame.nodes.nodepools.get(unitNo);if (nodepool null) {nodepool new NodePool();xhgame.nodes.nodepools.set(unitNo, nodepool);}let node: Node;if (nodepool.size() 0) {let prefab resources.get(xhgame.prefab.UnitSpineItem, Prefab)node instantiate(prefab);} else {node nodepool.get()!;}let unitItem node.getComponent(UnitItem);unitItem.unitNo unitNounitItem.itemId this.generateUnitItemId()return unitItem as UnitItem;}removeItem(unitItem: UnitItemIUnitItemAttr) {//压入缓存池管理节点let nodepool xhgame.nodes.nodepools.get(unitItem.unitNo);if (nodepool) {nodepool.put(unitItem.node);}unitItem.reset()unitItem.node.removeFromParent();}
} export interface IItem {itemId: numberreset()
} export class UnitItem extends Component implements IItem {itemId:number reset()
} 4、开始使用
let unitNo shibing_001
let unitItemManager new UnitItemManager()
let unitItem unitItemManager.createItem(unitNo)
unitItem.move()
unitItemManager.remove(unitItem)类似的工厂方法模式还有 effectItemManager特效工厂goodsItemManager物品工厂tiledItemManager地板工厂