10享元模式Flyweight
一、什么是享元模式
Flyweight模式也叫享元模式,是构造型模式之 一,它通过与其他类似对象共享数据来减小内存 占用。
二、享元模式的结构
三、享元模式的角色和职责
抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。
具体享元角色: 抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。
享元工厂角色: 负责创建和管理享元角色。
没用享元模式前
- //我的性格
- public class MyCharacter {
- private char mychar;
- public MyCharacter(char mychar) {
- this.mychar = mychar;
- }
- public void display() {
- System.out.println(mychar);
- }
- }
我的性格的工厂
- import java.util.HashMap;
- import java.util.Map;
- //我的性格的工厂
- public class MyCharacterFactory {
- private Map<Character,MyCharacter> pool;
- public MyCharacterFactory() {
- pool = new HashMap<Character,MyCharacter>();
- }
- public MyCharacter getMyCharacter(Character character) {
- MyCharacter myChar = pool.get(character);
- if(myChar == null) {
- myChar = new MyCharacter(character);
- pool.put(character, myChar);
- }
- return myChar;
- }
- }
测试
- public class MainClass {
- public static void main(String[] args) {
- // MyCharacter myChar1 = new MyCharacter('a');
- // MyCharacter myChar2 = new MyCharacter('b');
- // MyCharacter myChar3 = new MyCharacter('a');
- // MyCharacter myChar4 = new MyCharacter('d');
- //
- // myChar1.display();
- // myChar2.display();
- // myChar3.display();
- // myChar4.display();
- //
- // if(myChar1 == myChar3) {
- // System.out.println("true");
- // } else {
- // System.out.println("false");
- // }
- //1.创建MyCharacter工厂
- MyCharacterFactory factory = new MyCharacterFactory();
- //2.从工厂中取出相应的MyCharacter
- MyCharacter myChar1 = factory.getMyCharacter('a');
- MyCharacter myChar2 = factory.getMyCharacter('b');
- MyCharacter myChar3 = factory.getMyCharacter('a');
- MyCharacter myChar4 = factory.getMyCharacter('d');
- myChar1.display();
- myChar2.display();
- myChar3.display();
- myChar4.display();
- if(myChar1 == myChar3) {
- System.out.println("true");
- } else {
- System.out.println("false");
- }
- }
- }
===============================================================
人
- public class Person {
- private String name;
- private int age;
- private String sex;
- public Person(String name, int age, String sex) {
- super();
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
- public Person() {
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- }
老师
- public class Teacher extends Person {
- private String number;
- public String getNumber() {
- return number;
- }
- public void setNumber(String number) {
- this.number = number;
- }
- public Teacher(String name, int age, String sex,String number) {
- super(name, age, sex);
- this.number = number;
- }
- public Teacher() {
- super();
- }
- }
老师工厂
- import java.util.HashMap;
- import java.util.Map;
- //老师工厂
- public class TeacherFactory {
- private Map<String,Teacher> pool;
- public TeacherFactory() {
- pool = new HashMap<String,Teacher>();
- }
- public Teacher getTeacher(String number) {
- Teacher teacher = pool.get(number);
- if(teacher == null) {
- teacher = new Teacher();
- teacher.setNumber(number);
- pool.put(number, teacher);
- }
- return teacher;
- }
- }
测试方法
- public class MainClass {
- public static void main(String[] args) {
- TeacherFactory factory = new TeacherFactory();
- Teacher teacher1 = factory.getTeacher("0102034");
- Teacher teacher2 = factory.getTeacher("0102035");
- Teacher teacher3 = factory.getTeacher("0102034");
- Teacher teacher4 = factory.getTeacher("0102037");
- System.out.println(teacher1.getNumber());
- System.out.println(teacher2.getNumber());
- System.out.println(teacher3.getNumber());
- System.out.println(teacher4.getNumber());
- if(teacher1 == teacher3) {
- System.out.println("true");
- } else {
- System.out.println("false");
- }
- }
- }
10享元模式Flyweight的更多相关文章
- 设计模式(十)享元模式Flyweight(结构型)
设计模式(十)享元模式Flyweight(结构型) 说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释 ...
- 二十四种设计模式:享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...
- 享元模式 FlyWeight 结构型 设计模式(十五)
享元模式(FlyWeight) “享”取“共享”之意,“元”取“单元”之意. 意图 运用共享技术,有效的支持大量细粒度的对象. 意图解析 面向对象的程序设计中,一切皆是对象,这也就意味着系统的运行将 ...
- 享元模式-Flyweight(Java实现)
享元模式-Flyweight 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. 本文中的例子如下: 使用享元模式: 小明想看编程技术的书, ...
- Java享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)主要用于减少创建的对象数量,并减少内存占用并提高性能. 这种类型的设计模式属于结构模式,因为该模式提供了减少对象计数的方法,从而改善应用的对象结构. 享元 ...
- 设计模式-11享元模式(Flyweight Pattern)
1.模式动机 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈. 享元模式就是把相同或相似对象的公共部分提取出 ...
- 设计模式系列之享元模式(Flyweight Pattern)——实现对象的复用
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 享元模式 - Flyweight
Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...
随机推荐
- unity中尽量规避的C#写法
首先想到的也就是重名的问题. 创建C#脚本的时候,引擎会搜索所有的文件夹里已有的C#脚本,若已经存在这个名字的脚本文件,那么系统就会报错: 再者,类名和方法名不能相同,理解来就是,方法名和类名相 ...
- 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)
java发送新浪微博,一下博客从注册到发布第一条微博很详细 利用java语言在eclipse下实现在新浪微博开发平台发微博:http://blog.csdn.net/michellehsiao/art ...
- C# 调用windows api 操作鼠标、键盘、窗体合集...更新中
鼠标操作window窗体合集...更新中 1.根据句柄查找窗体 引自http://www.2cto.com/kf/201410/343342.html 使用SPY++工具获取窗体 首先打开spy+ ...
- Tidis单机部署
拉取镜像 docker pull yongman/tidis:latest docker pull pingcap/tikv docker pull pingcap/pd 运行pd,由于Raft算法3 ...
- RouterOS双线进行IP分流上网
环境: 1.第一条:电信静态IP,一级路由分配的IP:第二条:移动光纤 2.通过指定某些IP走电信,某些走移动 注意: 1.当有多条线路进行NAT伪装时,Out. Interface这个必须选择具体的 ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- vs2013修改书签(vs书签文件位置)
visual studio 2013 的书签功能很好用,可以记录一些代码的位置:方便查阅: 不过当项目被他人修改过后,svn update 更新过后,书签的文件行号不变,但是已经不再是原来记录的哪一行 ...
- 推荐一款在线编辑JSON的网站
推荐一款在线编辑JSON的网站 https://github.com/DavidDurman/FlexiJsonEditor 开源地址:https://github.com/DavidDurman/F ...
- 关于VIM自动缩进失效(filetype indent on无效)的详细分析
关于VIM自动缩进失效(filetype indent on无效)的详细分析 set filetype=xml filetype indent on 执行对齐命令:ggvG
- linux 切分文件
linux经常需要处理文件,如果文件比较大,那么需要切分成为若干的小文件再处理. 命令:split 比如有一个文件: ll -h 1431531915758 -rw-r--r-- 1 ticketde ...