设计模式-结构型模式总结实例(三)(二)

2014-11-24 03:16:56 · 作者: · 浏览: 2
.flyweight; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FlyweightClient { public static void main(String[] args) { // 客户下的订单 List orders = new ArrayList (); // 订单生成工厂 Order order = MealFactory.getOrder("西红柿鸡蛋"); orders.add(order); order = MealFactory.getOrder("宫保鸡丁"); orders.add(order); order = MealFactory.getOrder("西红柿鸡蛋"); orders.add(order); for (Order or : orders) { or.createOrder(); } } } //抽象享元角色 abstract class Order { final String foodName; public Order(String foodName) { super(); this.foodName = foodName; } public String getFoodName() { return foodName; } public abstract void createOrder(); } //具体享元角色 class Meal extends Order { public Meal(String foodName) { super(foodName); } @Override public void createOrder() { System.out.println("恭喜您下单成功,您所订购的饭菜为:"+foodName); } } //享元工厂 class MealFactory { private static Map orderPool =null; //返回单个对象实例如果存在直接返回如果不存在创建一个放入订单池中 public static Order getOrder(String foodName) { if (orderPool==null) { orderPool=new HashMap (); } Order order = null; if (!orderPool.containsKey(foodName)) { order = new Meal(foodName); orderPool.put(foodName, order); } else { order = orderPool.get(foodName); } return order; } }

享元模式就是在单例模式池容器上取业务定义的相关对象然后执行相关操作。可以减少程序内存的占用。但是为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化