享元模式的核心在于使用共同的代码来创建不一样的对象。
把不同的点都拎出来,剩下相同的用同一套代码。
abstract class Website
{
public abstract void Use(User user);
}
class ConcreteWebsite : Website
{
public ConcreteWebsite(string name)
{
Name = name;
}
public string Name { get; }
public override void Use(User user)
{
Console.WriteLine($"网站分类: {Name}, 用户: {user.Name}");
}
}
class User
{
public User(string name)
{
Name = name;
}
public string Name { get; }
}
class WebsiteFactory
{
private Dictionary<string, Website> flyweights = new Dictionary<string, Website>();
public Website GetWebsiteCategory(string key)
{
if (!flyweights.ContainsKey(key))
{
flyweights.Add(key, new ConcreteWebsite(key));
}
return flyweights[key];
}
public int GetWeisiteCount()
{
return flyweights.Count();
}
}
class Program
{
static void Main(string[] args)
{
WebsiteFactory wf = new WebsiteFactory();
var wb1 = wf.GetWebsiteCategory("博客");
wb1.Use(new User("zhangsan"));
var wb2 = wf.GetWebsiteCategory("博客");
wb2.Use(new User("lisi"));
var wb3 = wf.GetWebsiteCategory("美食");
wb3.Use(new User("wangwu"));
var wb4 = wf.GetWebsiteCategory("美食");
wb4.Use(new User("zhaoliu"));
Console.WriteLine("Hello World!");
}
}