文档章节

结构型模式之六:享元模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:45
字数 401
阅读 20
收藏 0
点赞 0
评论 0

享元模式用来减少内存使用,他所做的是尽可能的与其他类似的对象共享更多的数据。 

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;
  }
}

咖啡工厂,他只在需要的时候创建新咖啡

//The FlyweightFactory!
class CoffeeFactory {
  private HashMap flavors = new HashMap();
 
  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 array
  private static Coffee[] coffees = new Coffee[20];
  //table array
  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

以上文章翻译自: http://www.programcreek.com/2013/02/java-design-pattern-flyweight/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
Android的设计模式-享元模式

前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: Android的设计模式-设计模式的六大原则 一句话总结23种设计模式则 创建型模式: Android的设计模式-单例模式 Android的设计模式...

四月葡萄 ⋅ 01/04 ⋅ 0

设计模式之7个结构型模式

结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式概述 结构...

randy_shandong ⋅ 2017/01/12 ⋅ 0

设计模式-实现对象的复用——享元模式

享元模式概述 当一个系统中运行时产生的对象数量太多, 将导致运行代价过高, 带来系统性能下降的问题. 享元模式: 运用共享技术有效的支持大量细粒度对象的复用. 系统只使用少量的对象, 而这些...

hell03W ⋅ 2016/12/09 ⋅ 0

java结构型模式

结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。 在GoF设计模式中,结构型模式有: 1.适配...

就是小灰灰 ⋅ 2017/07/17 ⋅ 0

一句话总结23种设计模式则

1. 前言 断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。 2. 设计原则 设计原则的介绍 : 设计模式的六大原则 即使我们之前没有专门看过这...

四月葡萄 ⋅ 01/05 ⋅ 0

PHP的23种设计模式--php_design_patterns

学习理解设计模式,记录PHP关于23种设计模式的简单Demo。 设计模式分为:创建型模式, 结构型模式,行为型模式等23种设计模式。 一、五种创建型模式如下: 工厂方法模式factorymethod 抽象工...

匿名 ⋅ 2016/04/13 ⋅ 1

PHP设计模式(二):结构模式

上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式。(我的分享里面有) 一、什么是结构型模式? 结构...

juhenj ⋅ 2014/05/15 ⋅ 1

为什么要开始学习设计模式

Q: 为什么想总结一下每一个设计模式: 写了这么久程序了,不同的设计模式也见过不少,有的还比较了解,有的就几乎不认识, 所以一方面出于提高自己的实际能力,另一方面也是为了在提高自己的...

小翼Eric ⋅ 2015/07/06 ⋅ 0

剑指Offer——知识点储备-设计模式

剑指Offer——知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化); (2)里氏替换(任何父类出现的地方子类都可以替换); (3)依赖倒置...

sunhuaqiang1 ⋅ 2016/11/07 ⋅ 0

设计模式总结(二)

设计模式可分为三种:创建型设计模式,结构型设计模式和行为型设计模式。 一、创建型设计模式 在设计模式中,创建型设计模式处理对象创建过程的设计模式,它根据实际情况来决定具体怎样创建对...

邵鸿鑫 ⋅ 2014/05/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其...

JamesView ⋅ 16分钟前 ⋅ 0

解决问题的思路

1.相对来说,程序逻辑解决问题的思路应该更加趋向于通过逻辑结构来解决问题,而不是通过更小的类级别和方法级别的改进 2.类级别和方法级别的改进需要的技术能力更高一点

th778899 ⋅ 23分钟前 ⋅ 0

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子 ⋅ 23分钟前 ⋅ 0

error code 1874. innodb is in read only mode--报错解决

参考网页 https://zhidao.baidu.com/question/746894876932022292.html https://blog.csdn.net/shushugood/article/details/80226767 问题背景 创建了一个数据库然后想删除,因为自己本机性能......

karma123 ⋅ 24分钟前 ⋅ 0

JVM系列:jinfo命令详解

jinfo全称Java Configuration Info,主要作用是实时查看和调整JVM配置参数。 一.查看JVM参数 用法:jinfo -flag <name> PID 示例: # jinfo -flag MaxMetaspaceSize 11180 # -XX:MaxMetaspac......

Jacktanger ⋅ 29分钟前 ⋅ 0

exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

1. exportfs命令 一般情况下重启服务器上nfs服务时,需把客户端上的挂载先卸载掉,以免进程后面杀不掉。当客户端服务器很多时,操作起来就比较麻烦。此时可以使用exportfs命令重新加载下。 ...

laoba ⋅ 38分钟前 ⋅ 0

基于Python的信用评分卡模型分析

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主...

火力全開 ⋅ 39分钟前 ⋅ 0

执行make命令时报错g++: Command not found

执行make命令时报错g++: Command not found 2016年10月24日 12:31:29 阅读数:4366 朋友安装node时遇到的问题 报错截图: 其实很简单只需要安装一下 yum -y install gcc automake autoconf l...

rootliu ⋅ 39分钟前 ⋅ 0

Loongnix(龙芯)系统,优盘安装指南

U盘安装分为两种方式:"usb disk" 及 "usb cd"。其中usb cd是将usb disk做为usb光驱使用。 usb disk安装步骤: 需要准备一个大小超过3.5G的U盘,格式化ext3格式 下载安装光盘镜像xxx.iso,将...

gugudu ⋅ 43分钟前 ⋅ 0

HTML5中meta属性的使用详解

meta属性在HTML中占据了很重要的位置。如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等。虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能...

guorongjin ⋅ 46分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部