设计模式 - Flyweight模式

1 问题

面向对象语言的原则就是一切都是对象,但是如果真正使用起来,
有时对象数可能显得很庞大,比如,字处理软件,
如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,
那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,
封装可以被共享的类,另外,还有一些特性是取决于应用(context),
是不可共享的,
这也Flyweight中两个重要概念内部状态intrinsic和外部状态extrinsic之分.

2 代码

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Flyweight{

    public class Flyweight{

        private string _instrinsicState;

        public Flyweight(string instrinsicState){
            this._instrinsicState = instrinsicState;
        }

        public virtual void operation(string extrinsicState){}

        public string getInstrinsicState(){
            return this._instrinsicState;
        }
    }

    public class ConcerteFlyweight : Flyweight{

        public ConcerteFlyweight(string instrinsicState):base(instrinsicState){
            Debug.Log("ConcerteFlyweight Build.....");
        }

        public override void operation(string extrinsicState){
            Debug.Log("ConcreteFlyweight    内蕴:" + getInstrinsicState() + "外 蕴 :" + extrinsicState);
        }
    }

    public class FlyweightFactory{

        private List<Flyweight> listFly;

        public Flyweight getFlyweight(string key){
            foreach(Flyweight fly in listFly){
                if(fly.getInstrinsicState().Equals(key)){
                    return fly;
                }
            }
            return null;
        }

        public void addFlyweght(Flyweight fly){
            if(null == listFly){
                listFly = new List<Flyweight>();
            }

            if(null != listFly){
                listFly.Add(fly);
            }
        }
    }

    public class FlyweightDemo : MonoBehaviour {

        //享元模式
        void Start(){
            Flyweight fly = new ConcerteFlyweight("flyweight0");

            FlyweightFactory flyweightFactory = new FlyweightFactory();

            flyweightFactory.addFlyweght(fly);

            Flyweight fly0 = flyweightFactory.getFlyweight("flyweight0");

            fly0.operation("extra");
        }
    }
}

3 总结
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值