using UnityEngine;publicclassConcreteFlyWeight:FlyWeight{publicConcreteFlyWeight(string name):base(name){}publicoverridevoidOperation(){
Debug.Log("执行"+ Name);}}
using UnityEngine;publicabstractclassFlyWeight{publicstring Name;publicFlyWeight(string name){
Name = name;}publicabstractvoidOperation();}
using System.Collections.Generic;using UnityEngine;publicclassFlyWeightFactory{public Dictionary<string, FlyWeight> flyweightDic;//key 是共享组件的名称publicFlyWeightFactory(){
flyweightDic =newDictionary<string,FlyWeight>();}//获得共享组件publicFlyWeightGetFlyWeight(string key,string name=null)//根据key获得一个共享组件,如果没有,就创建这个组件,加入到共享组件列表中{
flyweightDic.TryGetValue(key,outFlyWeight res);if(res==null){
res =newConcreteFlyWeight(name);
flyweightDic[key]= res;}return res;}//获得非共享组件publicUnsharedConcreteFlyWeightGetUnShared(string name){returnnewUnsharedConcreteFlyWeight(name);}//获得包含共享组件的非共享组件publicUnsharedConcreteFlyWeightGetUnSharedHasShared(string name,string key,string sharedName=null){FlyWeight fw =GetFlyWeight(key, sharedName);UnsharedConcreteFlyWeight res =newUnsharedConcreteFlyWeight(name);
res.SetFlyWeight(fw);return res;}}
using System.Collections.Generic;using UnityEngine;publicclassUnsharedConcreteFlyWeight//不适用继承的方式,利用组合声明了一个可以指向共享组件的引用{publicFlyWeight flyWeight=null;publicstring Name;publicUnsharedConcreteFlyWeight(string name){
Name = name;
Debug.Log("创建非共享组件:"+ name);}//设置共享组件publicvoidSetFlyWeight(FlyWeight fw){this.flyWeight = fw;}publicvoidOperation(){
Debug.Log($"执行{Name}--{flyWeight?.Name}");}}
using UnityEngine;public class ConcreteFlyWeight : FlyWeight{ public ConcreteFlyWeight(string name):base(name) { } public override void Operation() { Debug.Log("执行" + Nam...