[关键字]:java,design pattern,设计模式,《Java与模式》学习,Flyweight Pattern,享元模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:
享元模式-单纯享元:
package pattern.flyweight.simple;
import java.util.*;
/**
* 单纯的享元
* @version 2009-6-25
* @author Winty(wintys@gmail.com)
*/
public class SimpleFlyweightTest{
public static void main(String[] args){
FlyweightFactory f = new FlyweightFactory();
Flyweight a = f.factory(new Character('a'));
a.operation("ex");
Flyweight b = f.factory(new Character('b'));
b.operation("ex");
Flyweight c = f.factory(new Character('a'));
c.operation("ex");
f.checkFlyweight();
}
}
/**
* 抽象享元
*/
abstract class Flyweight{
public abstract void operation(String extrinsicState);
}
/**
* 具体享元
*/
class ConcreteFlyweight extends Flyweight{
private Character intrinsicState;
public ConcreteFlyweight(Character intrinsicState){
this.intrinsicState = intrinsicState;
}
/**
* 外蕴状态改变方法行为,但不会改变内蕴状态
*/
@Override
public void operation(String extrinsicState){
String str = "intrinsic:" + intrinsicState;
str += " extrinsic:" + extrinsicState;
System.out.println(str);
}
}
/**
* 享元工厂
*/
class FlyweightFactory{
private Map<Character , Flyweight> map;
public FlyweightFactory(){
map = new HashMap<Character , Flyweight>();
}
public Flyweight factory(Character state){
Flyweight flyweight = null;
if(map.containsKey(state)){
flyweight = map.get(state);
}
else{
flyweight = new ConcreteFlyweight(state);
map.put(state , flyweight);
}
return flyweight;
}
/**
* 辅助方法
*/
public void checkFlyweight(){
Iterator<Map.Entry<Character , Flyweight>> it
= map.entrySet().iterator();
System.out.println("check flyweight:");
while(it.hasNext()){
Map.Entry<Character , Flyweight> entry = it.next();
Character key = entry.getKey();
System.out.println("key:" + key);
}
}
}
运行结果:
intrinsic:a extrinsic:ex
intrinsic:b extrinsic:ex
intrinsic:a extrinsic:ex
check flyweight:
key:b
key:a
- 大小: 44.9 KB
分享到:
相关推荐
设计模式专题之(十二)享元模式---设计模式享元模式示例代码(python--c++)
《C++20设计模式》学习笔记-第11章享元模式-配套代码
2 享元模式-课程内容.rar
2 享元模式-MOOC课程内容.pdf
JAVA-设计模式-结构型模式-享元模式
设计模式-享元模式(讲解及其实现代码)
设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx
设计模式--享元模式
c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...
java常用设计模式-享元模式
6.设计模式-享元模式1
享元模式的分析以及实际应用 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. 享元模式之借书...
设计模式的享元模式的例子,希望对大家有用~~~~~~~~
设计模式之享元模式的两种实现方式——单纯享元模式和复合享元模式,已经各种的UML类设计图
用享元模式分析并实现一个具体案例。在一家咖啡店中客户每买一杯咖啡,咖啡制做系统就相应地创建该杯咖啡的配料表,并将其发送给店内的咖啡制做机,咖啡制做机接收到系统发送的配料表后便开始制造客户所买的咖啡。...
设计模式之享元模式 设计模式之享元模式 设计模式之享元模式
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...
这是一个非常有趣的关于23种设计模式中命令模式和享元模式的例子。例子在命令模式的基础上进行重构以及使用享元模式优化。。
享元模式的示例代码和文档,学习享元模式的参考资料。
搜集整理的享元模式基本概念