【设计模式】11、享元模式
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.享元模式的本质是什么? 池技术:各种缓存池都是享元模式的体现 说到享元模 ...
- Java设计模式之享元模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之享元模式
Java设计模式之享元模式 1. 享元模式概述 1.1 享元定义 1.2 享元模式注意事项 2. 享元模式实现 1. 享元模式概述 1.1 享元定义 1)享元模式(享元模式)也叫蝇量模式:利用共享技术 ...
- 每天一个设计模式之享元模式
作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...
- 北风设计模式课程---享元模式与单例模式区别
北风设计模式课程---享元模式与单例模式区别 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1.享元模式与单例模式区别? 级别:单例模式是类级别的,一个类 ...
- .net设计模式 (享元模式)学习笔记
运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题 合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...
- 详解设计模式:享元模式
享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能.它提供了 ...
- 设计模式之享元模式详解
设计模式之享元模式详解 概述 享元模式定义: 运用共享技术来有效地支持大量细粒度对象的复用.它==通过共享已经存在的对象来大幅度减少需要创建的对象数量==.避免大量相似对象的开销,从而提高系统资源 ...
- 【设计模式】享元模式(C#)
[设计模式]享元模式 1.概述 Flyweight Design Pattern,结构型模式.享元模式中的"享元"指被共享的单元.享元模式通过复用对象,以达到节省内存的目的. 用于 ...
- 【设计模式】11.享元模式
概述 定义: 运用共享技术来有效地支持大量细粒度对象的复用.它通过共享已经存在的对象来大幅度减少需要创建的对象数量.避免大量相似对象的开销,从而提高系统资源的利用率. 结构 享元(Flyweigh ...
最新文章
- 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
- EL之Boosting之GB(DTR):简单回归问题使用梯度提升法(DIY数据集+DTR模型+调两参)
- HTTP状态码:204 No Content(总结HTTP状态码)
- oracle转64编码,[转]将oracle数据库的编码变成utf-8
- watch深度监听数组_vue watch普通监听和深度监听实例详解(数组和对象)
- 一个关于使用 $month,$dayOfMonth 进行按月/日统计的问题
- wince6下usb摄像头(UVC)使用指南
- 怀里橘猫柴犬,掌上代码江湖——对话阿里云MVP郭旭东
- 麦森数(洛谷-P1045)
- nginx经过多层代理后获取真实来源ip
- Spring Boot 集成maven和Spring boot的profile功能
- win10 JDK的安装及环境变量的配置
- These songs can cheer you up when life gets hard
- 智能手机与个人计算机有什么区别,请问智能手机与非智能手机的区别!
- 教老妈学认字的战斗史
- win10-LTSC2019装机必备操作和软件备忘录
- Unity3d 坦克AI_自动寻怪,自动追击脚本参考
- 什么是云手机?有免费的云手机吗?
- Linux下IO监控与分析 --转载
- HTML-背景和图片
热门文章
- 如何制作deb/rpm通用的构建命令?
- JDK粗体绘制效果为何如此之差
- 解压 .solitairetheme8 文件
- 解决办法:C代码中明明有,为什么编译时提示未定义的引用
- draw9patch做一个中心不变形的图片
- mstsc 中文打不了_伟大的中文!(妙不可言)
- git 各种撤销操作办法
- c# 火狐浏览器怎么嵌入窗体中_语言C#.net 如何将子窗体嵌入到父窗体里面
- python的ols_Python Statsmodels 统计包之 OLS 回归
- FindFirstFile和FindNextFile