1. 定义
享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象
按我的理解来说,享元,就是共享单元,重复运用,这个模式的核心是复用代码,按不同需要,创建并共用一个实例(不同需要是共用不同的单一实例),来节省开销
2. 例题与例题分析
题目:
小白需要给不同客户做网站,有“产品展示”类网站、“博客”类网站,但是同种网站内容样式差不多,后台代码逻辑也差不多,现在假设同种网站是一样的代码,不同之处是登录对象不同
解析:
- 首先抽象出一个抽象网站类,方便具体网站的继承,里面一个Use()方法
- 具体网站继承于抽象网站类,通过构造函数来表示不同的网站类
- 为了方便复用代码,同种网站应该使用同一套代码,这里以构造函数传的名称来表示不同网站,也就是说,同种网站只能实例化一个对象,共用同一个实例,以实例表示具体网站的内容(包括逻辑等)
- 怎么判断是同种网站就使用同一个实例呢?需要一个工厂类—享元工厂类
- 上面都是复用的,那么不复用的用户怎么办?以参数的显示在客户端使用
代码:
- 抽象网站类
//建立一个抽象网站类
abstract class WebSite
{
public abstract void Use(User user);
}
- 继承于抽象网站的具体类
class ConcreteWebSite : WebSite
{
private readonly string name;
public ConcreteWebSite(string name)
{
this.name = name;
}
public override void Use(