享元模式用来最大限度的减少内存使用。它所做的就是尽可能多的同其他类似对象共享数据。通常与工厂模式一起使用。
1、类图
2、JAVA代码实例
// 享元对象接口 interface ICoffee { public void serveCoffee(CoffeeContext context); }
// 具体的享元对象 class Coffee implements ICoffee { private final String flavor; public Coffee(String newFlavor) { this.flavor = newFlavor; System.out.println("Coffee is created! - " + flavor); } public String getFlavor() { return this.flavor; } public void serveCoffee(CoffeeContext context) { System.out.println("Serving " + flavor + " to table " + context.getTable()); } }
// 上下文,存着桌子号码 class CoffeeContext { private final int tableNumber; public CoffeeContext(int tableNumber) { this.tableNumber = tableNumber; } public int getTable() { return this.tableNumber; } }
咖啡工厂:需求某种咖啡时,只创建此种咖啡一次。
// 享元工厂 class CoffeeFactory { private HashMap<String, Coffee> flavors = new HashMap<String, Coffee>(); public Coffee getCoffeeFlavor(String flavorName) { Coffee flavor = flavors.get(flavorName); if (flavor == null) { flavor = new Coffee(flavorName); flavors.put(flavorName, flavor); } return flavor; } public int getTotalCoffeeFlavorsMade() { return flavors.size(); } }
public class TestFlyweight { // 咖啡数组 private static Coffee[] coffees = new Coffee[20]; // 桌子数组 private static CoffeeContext[] tables = new CoffeeContext[20]; private static int ordersCount = 0; private static CoffeeFactory coffeeFactory; public static void takeOrder(String flavorIn, int table) { coffees[ordersCount] = coffeeFactory.getCoffeeFlavor(flavorIn); tables[ordersCount] = new CoffeeContext(table); ordersCount++; } public static void main(String[] args) { coffeeFactory = new CoffeeFactory(); takeOrder("Cappuccino", 2); takeOrder("Cappuccino", 2); takeOrder("Regular Coffee", 1); takeOrder("Regular Coffee", 2); takeOrder("Regular Coffee", 3); takeOrder("Regular Coffee", 4); takeOrder("Cappuccino", 4); takeOrder("Cappuccino", 5); takeOrder("Regular Coffee", 3); takeOrder("Cappuccino", 3); for (int i = 0; i < ordersCount; ++i) { coffees[i].serveCoffee(tables[i]); } System.out.println("\nTotal Coffee objects made: " + coffeeFactory.getTotalCoffeeFlavorsMade()); } }
看下输出打印:为10个桌子的顾客提供了咖啡,但是只创建了两次咖啡。
输出
Coffee is created! - Cappuccino
Coffee is created! - Regular Coffee
Serving Cappuccino to table 2
Serving Cappuccino to table 2
Serving Regular Coffee to table 1
Serving Regular Coffee to table 2
Serving Regular Coffee to table 3
Serving Regular Coffee to table 4
Serving Cappuccino to table 4
Serving Cappuccino to table 5
Serving Regular Coffee to table 3
Serving Cappuccino to table 3
Total Coffee objects made: 2
Coffee is created! - Regular Coffee
Serving Cappuccino to table 2
Serving Cappuccino to table 2
Serving Regular Coffee to table 1
Serving Regular Coffee to table 2
Serving Regular Coffee to table 3
Serving Regular Coffee to table 4
Serving Cappuccino to table 4
Serving Cappuccino to table 5
Serving Regular Coffee to table 3
Serving Cappuccino to table 3
Total Coffee objects made: 2
相关推荐
如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)等。 - **行为型模式**:关注于对象间的职责分配,...
4.6 flyweight(享元)—对象结构型 模式 128 4.7 proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 adapter与bridge 144 4.8.2 composite、decorator与proxy 145 第5章 行为模式 147 ...
享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在大量对象创建时。享元模式通过共享已有对象来减少内存中对象的数量,从而达到降低内存消耗的效果。这种模式适用于那些轻量级对象,...
《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在大量对象创建时。在享元模式中,系统会共享那些具有大量相同状态的对象,从而减少内存中对象的数量,达到节省内存的目的。Java作为...
结构型模式的例子有适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。 3. 行为型模式:这些模式涉及类或对象的职责分配,它们描述了如何对各个类或对象之间如何分配职责以及如何协调它们...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的场景。在Java等面向对象编程语言中,享元模式通过共享大量相似对象来减少内存消耗,提高性能。在这个名为"designPattern8"的...
设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx
2. **结构型模式**:如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。这些模式关注如何将类或对象以某种方式组合起来,以实现新的功能或改善现有结构。 3. **行为型模式**:包括责任...
本文实例讲述了javascript 设计模式之享元模式。分享给大家供大家参考,具体如下: 享元模式说明 定义:用于解决一个系统大量细粒度对象的共享问题: 关健词:分离跟共享; 说明: 享元模式分单纯(共享)享元模式,...
享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...
总的来说,《设计模式:可复用面向对象软件的基础》是一本深入理解和应用面向对象设计的必备书籍,它不仅介绍了23种核心设计模式,还提供了大量实例和解释,帮助读者将理论知识转化为实际的编程技巧。通过对这本书的...
在这个“C#面向对象设计模式纵横谈(12)”中,我们将深入探讨享元模式的概念、实现方式以及如何在实际项目中应用。 享元模式的核心思想是区分对象的状态和行为。状态分为内部状态和外部状态,其中内部状态是对象共有...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...