设计模式之享元模式 FlyWeight

代码实现

 1 /**
 2  * 享元工厂类
 3  * @author bzhx
 4  * 2017年3月14日
 5  */
 6 public class ChessFlyWeightFactory {
 7     //享元池
 8     private static Map<String,ChessFlyWeight> map = new HashMap<String,ChessFlyWeight>();
 9     public static ChessFlyWeight getChess(String color){
10         if(map.get(color)!=null){
11             return map.get(color);
12         }else{
13             ChessFlyWeight cfw = new ConcreteChess(color);
14             map.put(color, cfw);
15             return cfw;
16         }
17     }
18 }

享元工厂类

1 public interface ChessFlyWeight {
2
3     void setColor(String c);
4     String getColor();
5     void display(Coordinate c);
6 }

抽象享元类

 1 //内部状态ConcreteFlyWeight
 2 class ConcreteChess implements ChessFlyWeight{
 3
 4     private String color;
 5
 6     public ConcreteChess(String color) {
 7         super();
 8         this.color = color;
 9     }
10
11     @Override
12     public void setColor(String c) {
13         this.color = c;
14     }
15
16     @Override
17     public String getColor() {
18         return color;
19     }
20
21     @Override
22     public void display(Coordinate c) {
23         System.out.println("棋子颜色:"+color);
24         System.out.println("棋子位置:"+c.getX()+"-----"+c.getY());
25     }
26
27 }

具体享元类(内部共享)

 1 /**
 2  * 外部状态 UnSharedConcreteFlyWeight
 3  * @author bzhx
 4  * 2017年3月14日
 5  */
 6 public class Coordinate {
 7
 8     private int x,y;
 9
10     public Coordinate(int x, int y) {
11         super();
12         this.x = x;
13         this.y = y;
14     }
15
16     public int getX() {
17         return x;
18     }
19
20     public void setX(int x) {
21         this.x = x;
22     }
23
24     public int getY() {
25         return y;
26     }
27
28     public void setY(int y) {
29         this.y = y;
30     }
31
32
33
34 }

非共享享元类

 1 public class Client {
 2
 3     public static void main(String[] args) {
 4         ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色");
 5         ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("黑色");
 6         System.out.println(chess1);
 7         System.out.println(chess2);
 8
 9         System.out.println("增加外部状态的处理============================");
10         chess1.display(new Coordinate(10,10));
11         chess2.display(new Coordinate(20,20));
12     }
13
14 }

测试调用

时间: 2024-11-10 11:35:59

设计模式之享元模式 FlyWeight的相关文章

二十四种设计模式:享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支持这些对象. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Flyweight { /// <summary> /// Message实体类 ///

设计模式之享元模式(Flyweight)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,

设计模式 笔记 享元模式 Flyweight

//---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1:意图: 运用共享技术有效地支持大量细粒度的对象. 2:动机: 3:适用性: 以下条件都成立时才能使用. 1>一个应用程序使用了大量的对象. 2>完全由于使用大量的对象,造成很大的存储开销. 3>对象的大多数状态都可变为外部状态. 4>如果删除对象的外部状态,那么可以用相对较少的共享对

【设计模式】—— 享元模式Flyweight

前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是不需要每次都创建一个字母对象,只需要把它放到某个地方共享使用,单独记录每次创建的使用上下文就可以了. 再比如餐馆的桌子,餐具,这些都是享元模式的体现.客户是流动的,每次吃饭都是用饭店固定的那些餐具,而饭店也不需要每次新来顾客,就买新的盘子餐具. 应用场景 1 一个系统应用到了大量的对象,而且很多都是

浅谈JAVA设计模式之——享元模式(Flyweight)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45568799 一.概述 运用共享技术有效地支持大量细粒度的对象. 二.适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对

设计模式之享元模式--- Pattern Flyweight

模式的定义 享元模式(Flyweight Pattern)是沲技术的重要实现方式,其定义如下: Use sharing to support large numbers of fine-grained objects efficiently. 使用共享对象可有效地支持大量的细粒度的对象. 享元模式的定义提出了二个要求:细粒度的对象和共享对象.分配太多的对象将有损程序的性能,同时还容易造成内存溢出.避免这种情况,就是使用享元模式中的共享技术. 细粒度的状态分为内部状态(instrinsic)和外部

设计模式:享元(FlyWeight)模式

设计模式:享元(FlyWeight)模式 一.前言     享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候,如果产生的是同一个对象,那么直接使用已经产生的,听起来很像是单例模式,其实享元模式的内部实现就是很类似与单例模式的懒汉模式.享元的好处就是,在某些场景下可以节省内存,从而使得程序的性能得到提升.     那么到底什么对象是可以共享的呢?!比如操作系统安装的时候就已经自动保存的图标.字体等等东西,这

设计模式之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri

从七龙珠的角度来看设计模式之享元模式

       转载请声明:http://www.cnblogs.com/courtier/p/4290327.html 人话:        享元模式:运用共享技术解决大量对象的问题! 前言:        我所知道的设计模式最难的四大模式之一:享元模式,其他三个分别是:生成器模式,桥接模式,解释器模式! 应用场景:JAVA 字符串内存池.(经常有些面试官问 string 是不是同一对象,其实就是考察享元模式) •Flyweight — 描述一个接口,通过这个接口Flyweight可以接受并作用