享元模式,先占位,由于文章太耗时,后面补上。其实就是缓存使用。
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;
}
}
}