博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式漫谈之享元模式
阅读量:5923 次
发布时间:2019-06-19

本文共 1757 字,大约阅读时间需要 5 分钟。

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

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

在面向对象中,每个对象都要占用空间,比如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年开发经验。

 

转载于:https://www.cnblogs.com/wang-charle/p/8899636.html

你可能感兴趣的文章
linux下WordPress文件夹权限设置
查看>>
GC in C# and Python
查看>>
各种国家标准代码表
查看>>
解决Eclipse进行Android开发时logcat不显示问题-使用DDMS
查看>>
[Step By Step]SAP HANA中创建分析权限(Analytic Privilege)
查看>>
黑马程序员:Java基础总结----java注解
查看>>
ASP.NET4.5Web API及非同步程序开发系列(2)
查看>>
ny42 一笔画问题
查看>>
Linux硬盘速度测试的命令
查看>>
转载:Struts2支持断点续传下载实现
查看>>
OpenStack三个节点icehouse-gre模式部署
查看>>
Android SDK Manager 更新代理配置
查看>>
log4j
查看>>
Product Management vs. Product Marketing
查看>>
UF访问,一些对用友最新的旗舰级产品U9一些引进(图像)
查看>>
group by 和聚合函数
查看>>
Android 支付宝钱包手势password裂纹战斗
查看>>
【Oracle】BLOB
查看>>
Oracle DB 管理数据库的空间
查看>>
IOS 基于APNS消息推送原理与实现(JAVA后台)
查看>>