• 设计模式漫谈之享元模式


    今天周六,休息,刚下过雨,有风。

    哈哈,像不像古龙的小说。程序员不是机器人,不是国家总理,没有那么忙。而老板讲究的永远是利益,利用,所以当你没利用价值的时候,看老板能闲养你三个月吗?程序员的赚钱工具就是技术,别人无法替代的技术。天天休息不好,失眠,心乱,只能写篇博客静静心。

    在面向对象中,每个对象都要占用空间,比如New一个对象,是在堆中分配空间,然后把堆中的引用给这个引用类型。但是不同的对象,虽然空间不同,但是空间中的值是可以相同的。像匿名方法,只用一次,不再用,所以也就没必要起个名字。而有些对象,New后,使用后,可能还会使用,这样的对象应该放在对象池子中。对象从类型上分,可以分不同的类型,从数量上分,可以分单个,多个集合。池子对象就是集合对象。

    闲话少说,今天说享元模式,享,享福的意思,共享。元,对象的静态成员,动态成员都是元。

    直接上例子,我来解释。

    //抽象类,一种接收者

    abstract class WebSite
    {
    public abstract void Use(User user);
    }

    //具体类

    class ConcreteWebSite : WebSite
    {
    private string name = "";
    public ConcreteWebSite(string name)
    {
    this.name = name;
    }

    public override void Use(User user)
    {
    Console.WriteLine("网站分类:" + name + " 用户:" + user.Name);
    }
    }

    //工厂,生成对象,存放对象。

    class WebSiteFactory
    {

    //存对象
    private Hashtable flyweights = new Hashtable();

    //把对象缓存起来
    public WebSite GetWebSiteCategory(string key)
    {
    if (!flyweights.ContainsKey(key))
    flyweights.Add(key, new ConcreteWebSite(key));
    return ((WebSite)flyweights[key]);
    }


    public int GetWebSiteCount()
    {
    return flyweights.Count;
    }
    }

    //参数包装者,对象的关联关系

    public class User
    {
    private string name;

    public User(string name)
    {
    this.name = name;
    }

    public string Name
    {
    get { return name; }
    }
    }

    //对象的对外接口

    WebSiteFactory f = new WebSiteFactory();

    WebSite fx = f.GetWebSiteCategory("产品展示");
    fx.Use(new User("小菜"));

    //对象重复使用,共享池中对象

    WebSite fy = f.GetWebSiteCategory("产品展示");
    fy.Use(new User("大鸟"));

    WebSite fz = f.GetWebSiteCategory("产品展示");
    fz.Use(new User("娇娇"));

    WebSite fl = f.GetWebSiteCategory("博客");
    fl.Use(new User("老顽童"));

    WebSite fm = f.GetWebSiteCategory("博客");
    fm.Use(new User("桃谷六仙"));

    WebSite fn = f.GetWebSiteCategory("博客");
    fn.Use(new User("南海鳄神"));

    总结,休息不好,没有感情滋养,精神状态不佳。程序员这个职业属于坚持的人,坚持下来的才称得上程序员。下一个目标,工作到2022年,10年开发经验。

  • 相关阅读:
    React开发流程及认识
    Python整合AnaConda
    计算机显示器扩展方向调整
    python3 urlencode 和 urldecode 使用
    解决开启Vue项目缺少node_models包问题
    解决开启Vue项目缺少node_models包问题
    python中列表相加
    python炒鸡面试题
    Django中的CBV控制前后端分离模式
    selenuim使用总结
  • 原文地址:https://www.cnblogs.com/wang-charle/p/8899636.html
Copyright © 2020-2023  润新知