享元模式的角色划分:
1,抽象享元角色:享元角色需要实现的公共接口。外蕴状态可以通过商业方法以参数的形式传入。
2,具体享角色:负责维护内蕴状态。且提供内蕴含状态的空间。内蕴状态不与环境有关,对象初始化时,内蕴含状态就已经产生。
3,享元工厂角色:负责维护和管理享元角色,在工厂中没有找到相应的享元对象,则负责创建相应的享元对象。
本质工厂角色应该是个享元对象的容器。
4,客户端角色:自行维护外蕴状态,外蕴跟环境有关。
享元模式分单纯享元模式和复合享元模式
这里就讲讲单纯享元模式。 下面以不同口味的冰棒为例。
//冰棒接口
public interface Popsicle{
//商业方法
public void buy();
}
//具体享元对象
public class GreenPeasPopsicle implments Popsicle{
//不同风味的雪糕,绿豆,荔枝味等 内蕴状态
String flavor = null;
public GreenPeasPopsicle(String flavor){
this.flavor = flavor;
}
//客人购买不同味道的雪糕
public void buy(){
System.out.println("当钱被购买的雪糕风味是="+this.flavor);
}
//返回雪糕的名字
public String getFlavor(){
return flavor;
}
}
//风味工厂类,可以单实例
public class PopsicleFactory{
private Map<String ,Popsicle> popsicleMap = new HashMap<String,Popsicle>();
private PopsicleFactory instance = new PopsicleFactory();
//私有构造方法
private PopsicleFactory(){
}
//得工厂实例
public static PopsicleFactory getInstance(){
return instance;
}
//维护和管理享元对象的工厂
public Popsicle factory(String flavor){
if(StringUtils.isBlank(flavor)){
return null;
}
if(popsicleMap .contain(flavor)){
return popsicleMap.get(flavor);
}
Popsicle popsicle = new GreenPeasPopsicle(flavor);
popsicleMap.put(flavor,popsicle);
}
}
//客户端端调用
public class Client{
public static void main(String args){
//我要绿豆为的雪糕
Popsicle greePopsicle = PopsicleFactory.getInstance().factory("雪糕味");
grerPopsicle.buy();
greePopsicle = PopsicleFactory.getInstance().factory("荔枝味");
greePopsicle .buy();
greePopsicle = PopsicleFactory.getInstance().factory("雪糕味");
greePopsicle .buy();
}
}
//打印结果
当钱被购买的雪糕风味是=雪糕味
当钱被购买的雪糕风味是=荔枝味
当钱被购买的雪糕风味是=雪糕味
这里其实雪糕味只创建一个对象。因为他们的内蕴状态风味(雪糕味)是一样的。是共享的。
模式使用场景:
1, 大量使用对象产生时。
2,对象产生的内蕴状态不依赖环境而发生改变。
优点:
提搞了性能以及不要创建重复的大量对象
缺点:
查错比较困难。
发表评论
-
调停者,观察者,门面模式
2011-11-15 19:38 1218调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 592访问者模式 -
状态模式
2011-08-26 10:06 458状态模式 -
备忘录模式
2011-08-25 16:17 746备忘录模式又叫快照模式或者Token模式 是对象的行为模式 ... -
命令模式
2011-08-25 14:40 666命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
责任链模式
2011-08-24 21:40 648责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理 ... -
模板方法模式
2011-08-24 13:35 628这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 638策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 652不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 685桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 862为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 667装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ... -
组合设计模式(合成模式)
2011-08-14 23:35 798组合设计模式(部分-整体设计模式) 主要角色涉及三个 抽 ...
相关推荐
用享元模式分析并实现一个具体案例。在一家咖啡店中客户每买一杯咖啡,咖啡制做系统就相应地创建该杯咖啡的配料表,并将其发送给店内的咖啡制做机,咖啡制做机接收到系统发送的配料表后便开始制造客户所买的咖啡。...
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...
享元模式的分析以及实际应用 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 3. 享元模式介绍 5 3.1举例分析 5 3.2基本介绍 5 3.3享元模式的具体角色 5 4. 享元模式之借书...
设计模式的享元模式的例子,希望对大家有用~~~~~~~~
设计模式之享元模式 设计模式之享元模式 设计模式之享元模式
设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx
设计模式之享元模式的两种实现方式——单纯享元模式和复合享元模式,已经各种的UML类设计图
享元模式的示例代码和文档,学习享元模式的参考资料。
享元模式Demo
享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。
享元模式最适合于解决因创建大量类似对象而累及性能的问题,本文将来总结JavaScript设计模式编程中的享元模式使用,包括在DOM操作时的利用示例:
设计模式-享元模式(讲解及其实现代码)
Android享元模式Demo,同步文章地址:http://blog.csdn.net/qq_28690547/article/details/51144424
设计模式(C#)之享元模式(Flyweight Pattern),运用共享技术有效地支持大量细粒度的对象。
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)
设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
设计模式中的享原模式技术入门,可用于各种说明场合,一看就会哦
享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是...