C#面向对象设计模式11:享元模式(Flyweight)

享元模式,先占位,由于文章太耗时,后面补上。其实就是缓存使用。

using System;
using System.Collections.Generic;
using System.Linq;

namespace SimpleFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            var package1 = new 炒粉打包(true, false);
            package1.打包(1);
            var package2 = new 炒粉打包(false, false);
            package2.打包(2);
            var package3 = new 炒粉打包(true, true);
            package3.打包(1);
            var package4 = new 炒粉打包(false, true);
            package4.打包(2);
            事先打包好的炒粉 factory = new 事先打包好的炒粉(package1, package2, package3, package4);
            Console.WriteLine("已经打包好了4份,现在等客人来买");

            var 炒粉打包 = factory.取一份炒粉(true, false, 2);
            if (炒粉打包 == null)
            {
                炒粉打包 = new 炒粉打包(false, false);
                炒粉打包.打包(2);
                Console.WriteLine("事先打包好的炒粉中,没有客人想要的,临时打包一份给它");
            }
            else
            {
                Console.WriteLine("从事先打包好的炒粉中拿了一份给客人,客人付款后走了");
            }
        }
    }

    public class 炒粉
    {
        public void 制作()
        {
            Console.WriteLine($"炒粉制作完毕");
        }
    }

    public class 炒粉打包
    {
        private bool _是否放辣椒;
        private bool _是否放酱油;

        public 炒粉打包(bool 是否放辣椒, bool 是否放酱油)
        {
            this._是否放辣椒 = 是否放辣椒;
            this._是否放酱油 = 是否放酱油;
        }

        public void 打包(int 打包份量)
        {
            var des = 打包份量 == 1 ? "小份" : "大份";
            Console.WriteLine($"打包完毕,这份炒粉的情况: 份量{des}、是否放辣椒{this._是否放辣椒}、是否放酱油{this._是否放酱油}");
        }
    }

    public class 事先打包好的炒粉
    {
        private List<炒粉打包> _事先打包好的炒粉列表 = new List<炒粉打包>();

        public 事先打包好的炒粉(params 炒粉打包[] packages)
        {
            foreach (var item in packages)
            {
                this._事先打包好的炒粉列表.Add(item);
            }
        }

        private 炒粉打包 Pack(bool 是否放辣椒, bool 是否放酱油, int 打包份量)
        {
            var package = new 炒粉打包(是否放辣椒, 是否放酱油);
            package.打包(打包份量);

            return package;
        }

        public 炒粉打包 取一份炒粉(bool 是否放辣椒, bool 是否放酱油, int 打包份量)
        {
            var food = this._事先打包好的炒粉列表.FirstOrDefault();
            if (food == null)
            {
                return this.Pack(是否放辣椒, 是否放酱油, 打包份量);
            }

            return food;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值