[译]ava 设计模式之享元
(文章翻译自Java Design Pattern: Flyweight)
享元模式用于最小化内存开销。它做的就是使用其他相似的对象尽可能多的分享数据。
1.享元模式类图
2.享元模式Java代码
// Flyweight object interface
interface ICoffee {public void serveCoffee(CoffeeContext context);
}
// Concrete Flyweight object
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());}
}
// A context, here is table number
class CoffeeContext {private final int tableNumber;public CoffeeContext(int tableNumber) {this.tableNumber = tableNumber;}public int getTable() {return this.tableNumber;}
}
CoffeeFactory:它只是在需要的时候才会创建一个新的咖啡。
//The FlyweightFactory!
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 Waitress {//coffee arrayprivate static Coffee[] coffees = new Coffee[20];//table arrayprivate 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());}
}
检查下面的结果输出,虽然有十个桌子需要咖啡可是只生产了两种咖啡。
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 3Total Coffee objects made: 2
转载于:https://www.cnblogs.com/zhangminghui/p/4214381.html
[译]ava 设计模式之享元相关推荐
- 设计模式:享元(FlyWeight)模式
设计模式:享元(FlyWeight)模式 一.前言 享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候 ...
- 北风设计模式课程---享元模式
北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...
- 结构设计模式 - Flyweight设计模式(享元设计模式)
结构设计模式 - Flyweight设计模式 今天我们将研究Flyweight 设计模式,Flyweight设计模式又被称为 享元设计模式 . 目录[ 隐藏 ] 1 Flyweight设计模式 1.1 ...
- 每天一个设计模式之享元模式
作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...
- 北风设计模式课程---享元模式与单例模式区别
北风设计模式课程---享元模式与单例模式区别 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式与单例模式区别? 级别:单例模式是类级别的,一个类 ...
- .net设计模式 (享元模式)学习笔记
运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题 合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...
- Java设计模式之享元模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- 详解设计模式:享元模式
享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能.它提供了 ...
- 设计模式之享元模式详解
设计模式之享元模式详解 概述 享元模式定义: 运用共享技术来有效地支持大量细粒度对象的复用.它==通过共享已经存在的对象来大幅度减少需要创建的对象数量==.避免大量相似对象的开销,从而提高系统资源 ...
最新文章
- ECS控制台支持创建资源时绑定标签
- memcache及其telnet命令使用详解
- php递归函数return会出现无法正确返回想要值的情况
- 木马捆绑器设计思路和源码
- VBS 自动发送邮件
- Qt5中文乱码解决方案
- 列表框、下拉列表框或组合框与数据库
- Android中TextView中文字体粗体的设置方法
- Qt5.3.1环境变量配置-----gyy
- HIVE 实现均匀抽样
- jpress-项目升级
- ベルベット / 贝姐
- 解决 chrome 启动时强制打开2345导航(或其他网址)的方法
- 【 linux 从入门到放弃(全网最详细虚拟机及c7安装)】
- vue循环jq渲染网页页面
- BM发声,孙宇晨入场,国产公链集体进军DeFi
- 交换机进行syslog服务器设置
- Win10 去除OneNote 波浪下划线
- Molecular Psychiatry:海马及其相关网络在电休克抗抑郁中的机制研究
- 跨模态/多模态 cross-modal
热门文章
- 《LeetCode力扣练习》第39题 组合总和 Java
- php sql报错1054 in,sql语句拼接 报错
- python壁纸程序代码_python设置windows桌面壁纸的实现代码
- mysql merge union_MySQLMerge存储引擎
- js 将二进制流html导出excel,js 实现纯前端将数据导出excel
- C++知识点26——使用C++标准库(常用的泛型算法1)
- Linux发布环境,linux发布环境初始化脚本
- arraylist从大到小排序_初学Python最简易入门之十四排序算法10对字典排序
- java 定时_结合真实案例,清晰梳理几种定时任务的退出「JAVA并发」
- 使用 markdown-it 解析 markdown 代码(读 VuePress 三)