享元模式
来源:互联网 发布:mysql 需要.net吗 编辑:程序博客网 时间:2024/06/02 02:31
享元模式:
意图:运用共享技术有效的支持大量细粒度的对象。
享元模式可使共享的访问那些大量出现的细粒度对象,享元对象必须是不可变的,可将那些不变得部分提取出来
享元模式的重点:
分离变与不变,本质是分离与共享。把一个对象的状态分为内部状态和外部状态。内部状态是不变的,外部状态是可变的,通过共享不变的部分,达到减少对象数量并节约内存的目的。
内部状态:通常指的是包含在享元对象内部的、对象本身的状态,不会随享元环境而变化,因此可共享。
外部状态:是享元对象之外的状态,取决于使用享元的场景,会根据应用场景而变化,因此不可共享。若享元对象需要这些外部状态,可从外部传到外部状态中,外部状态和内部状态是相互独立的,外部状态的变化不会引起内部状态的变化。
享元模式结构图:
抽象享元角色:所有具体享元类的父类,规定一些需要实现的公共接口。
具体享元角色:抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。
享元工厂角色:负责创建和管理享元角色,一般需要一个hashmap对象
public interface Order {
public void sell();
}
public class FlavorOrder implements Order{
private String name;
public FlavorOrder(String name){
this.name = name;
}
@Override
public void sell() {
System.out.println("卖出一份"+name+"味儿的咖啡");
}
}
public class FlavorFactory {
private Map<String, Order> flavorMap = new HashMap<String,Order>();
private static FlavorFactory factory = null;
public static FlavorFactory GetInstance(){
if (factory == null) {
factory = new FlavorFactory();
}
return factory;
}
public Order getOrder(String favor){
Order order = null;
if (flavorMap.containsKey(favor)) {
order = flavorMap.get(favor);;
} else {
order = new FlavorOrder(favor);
flavorMap.put(favor, order);
}
return order;
}
public int getTotalFlavorMade(){
return flavorMap.size();
}
}
public class Test {
private static List<Order> orders = new ArrayList<Order>();
private static FlavorFactory factory = null;
private static void takeOrders(String favor){
orders.add(factory.getOrder(favor));
}
public static void main(String[] args) {
factory = FlavorFactory.GetInstance();
takeOrders("拿铁");
takeOrders("拿铁");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
takeOrders("卡布奇诺");
System.out.println("一共"+orders.size()+"单");
System.out.println("制作了"+factory.getTotalFlavorMade());
for (Order order:orders) {
order.sell();
}
}
}
- 深入浅出享元模式
- 享元模式
- 享元(FlyWeight)模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式Flyweight
- 享元模式
- 享元模式
- 享元模式
- FlyWeight 享元模式
- 享元模式(Flyweight)
- 享元模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式 ---flyweight
- 我的Unity 3D之旅——第一人称射击游戏(5)
- 采药2 (Standard IO)
- [leetcode] 383. Ransom Note
- 【zzulioj 1907 小火山的宝藏收益 】
- eclipse强大的代码提示插件——aptana
- 享元模式
- Altium Designer -- PCB设置板框
- iOS UILabel多行时文字向下偏移
- OSG + VS2008 + win7环境搭建
- 参数传递引用
- 下拉列表
- java-----NIO总结(三)
- const、volatile、mutable的用法
- hdu 1058