1 package com.shejimoshi.structural.Flyweight;
 2
 3
 4 /**
 5  * 功能:运用共享技术有效地支持大量细粒度的对象,这个就是作为享元的类
 6  * 适用:1、一个应用程序使用了大量的对象
 7  *      2、完全由于使用大量的对象、造成很大的存储开销
 8  *      3、对象的大多数状态都可以改变为外部状态
 9  *      4、如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象
10  *      5、应用程序不依赖于对象标识
11  * 时间:2016年2月27日下午10:12:01
12  * 作者:cutter_point
13  */
14 public abstract class Phone
15 {
16     public abstract void use();
17 }

 1 package com.shejimoshi.structural.Flyweight;
 2
 3
 4 /**
 5  * 功能:苹果手机享元
 6  * 时间:2016年2月27日下午10:23:27
 7  * 作者:cutter_point
 8  */
 9 public class ApplePhone extends Phone
10 {
11     private String type;
12
13     public ApplePhone(String type)
14     {
15         this.type = type;
16     }
17
18     @Override
19     public void use()
20     {
21         System.out.println("使用"+ type +"苹果手机");
22     }
23
24 }

 1 package com.shejimoshi.structural.Flyweight;
 2
 3 import java.util.HashMap;
 4 import java.util.Map;
 5
 6
 7 /**
 8  * 功能:这个就是享元工厂
 9  * 时间:2016年2月27日下午10:26:20
10  * 作者:cutter_point
11  */
12 public class PhoneFactory
13 {
14     private static Map<String, Phone> phones = new HashMap<String, Phone>();
15
16     public static Phone getPhone(String type)
17     {
18         //这里返回的值可以是新创建的,也可以是已经存在的
19         Phone phone = phones.get(type);
20         //如果不存在就新建
21         if(phone == null)
22         {
23             phone = new ApplePhone(type);
24             phones.put(type, phone);    //添加进去
25         }
26
27         return phone;
28     }
29
30     public int size()
31     {
32         return phones.size();
33     }
34
35 }

 1 package com.shejimoshi.structural.Flyweight;
 2
 3
 4 /**
 5  * 功能:享元测试
 6  * 时间:2016年2月27日下午10:34:46
 7  * 作者:cutter_point
 8  */
 9 public class Test
10 {
11     private PhoneFactory pf = new PhoneFactory();
12     private Phone p1;
13     private Phone p2;
14     private Phone p3;
15     private Phone p4;
16     private Phone p5;
17
18     public Test()
19     {
20         p1 = pf.getPhone("银色");
21         p2 = pf.getPhone("土豪金");
22         p3 = pf.getPhone("土豪金");
23         p4 = pf.getPhone("玫瑰金");
24         p5 = pf.getPhone("银色");
25     }
26
27     public void usethem()
28     {
29         p1.use();
30         p2.use();
31         p3.use();
32         p4.use();
33         p5.use();
34         System.out.print("工厂大小:" + pf.size());
35     }
36
37     public static void main(String[] args)
38     {
39         Test t = new Test();
40         t.usethem();
41     }
42 }

结果:

使用银色苹果手机
使用土豪金苹果手机
使用土豪金苹果手机
使用玫瑰金苹果手机
使用银色苹果手机
工厂大小:3

  

转载于:https://www.cnblogs.com/cutter-point/p/5223782.html

【设计模式】11、享元模式相关推荐

  1. 北风设计模式课程---享元模式

    北风设计模式课程---享元模式 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...

  2. Java设计模式之享元模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  3. Java设计模式之享元模式

    Java设计模式之享元模式 1. 享元模式概述 1.1 享元定义 1.2 享元模式注意事项 2. 享元模式实现 1. 享元模式概述 1.1 享元定义 1)享元模式(享元模式)也叫蝇量模式:利用共享技术 ...

  4. 每天一个设计模式之享元模式

    作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...

  5. 北风设计模式课程---享元模式与单例模式区别

    北风设计模式课程---享元模式与单例模式区别 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式与单例模式区别? 级别:单例模式是类级别的,一个类 ...

  6. .net设计模式 (享元模式)学习笔记

    运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题  合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...

  7. 详解设计模式:享元模式

    享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能.它提供了 ...

  8. 设计模式之享元模式详解

    设计模式之享元模式详解 概述 享元模式定义: ​ 运用共享技术来有效地支持大量细粒度对象的复用.它==通过共享已经存在的对象来大幅度减少需要创建的对象数量==.避免大量相似对象的开销,从而提高系统资源 ...

  9. 【设计模式】享元模式(C#)

    [设计模式]享元模式 1.概述 Flyweight Design Pattern,结构型模式.享元模式中的"享元"指被共享的单元.享元模式通过复用对象,以达到节省内存的目的. 用于 ...

  10. 【设计模式】11.享元模式

    概述 定义: ​ 运用共享技术来有效地支持大量细粒度对象的复用.它通过共享已经存在的对象来大幅度减少需要创建的对象数量.避免大量相似对象的开销,从而提高系统资源的利用率. 结构 享元(Flyweigh ...

最新文章

  1. 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
  2. EL之Boosting之GB(DTR):简单回归问题使用梯度提升法(DIY数据集+DTR模型+调两参)
  3. HTTP状态码:204 No Content(总结HTTP状态码)
  4. oracle转64编码,[转]将oracle数据库的编码变成utf-8
  5. watch深度监听数组_vue watch普通监听和深度监听实例详解(数组和对象)
  6. 一个关于使用 $month,$dayOfMonth 进行按月/日统计的问题
  7. wince6下usb摄像头(UVC)使用指南
  8. 怀里橘猫柴犬,掌上代码江湖——对话阿里云MVP郭旭东
  9. 麦森数(洛谷-P1045)
  10. nginx经过多层代理后获取真实来源ip
  11. Spring Boot 集成maven和Spring boot的profile功能
  12. win10 JDK的安装及环境变量的配置
  13. These songs can cheer you up when life gets hard
  14. 智能手机与个人计算机有什么区别,请问智能手机与非智能手机的区别!
  15. 教老妈学认字的战斗史
  16. win10-LTSC2019装机必备操作和软件备忘录
  17. Unity3d 坦克AI_自动寻怪,自动追击脚本参考
  18. 什么是云手机?有免费的云手机吗?
  19. Linux下IO监控与分析 --转载
  20. HTML-背景和图片

热门文章

  1. 如何制作deb/rpm通用的构建命令?
  2. JDK粗体绘制效果为何如此之差
  3. 解压 .solitairetheme8 文件
  4. 解决办法:C代码中明明有,为什么编译时提示未定义的引用
  5. draw9patch做一个中心不变形的图片
  6. mstsc 中文打不了_伟大的中文!(妙不可言)
  7. git 各种撤销操作办法
  8. c# 火狐浏览器怎么嵌入窗体中_语言C#.net 如何将子窗体嵌入到父窗体里面
  9. python的ols_Python Statsmodels 统计包之 OLS 回归
  10. FindFirstFile和FindNextFile