`
coolerbaosi
  • 浏览: 728466 次
文章分类
社区版块
存档分类
最新评论

享元模式 Flyweight Pattern

 
阅读更多
一、什么是享元模式
Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。

二、享元模式的结构
see the picture



三、享元模式的角色和职责

抽象享元角色:

所有具体享元类的父类,规定一些需要实现的公共接口。

具体享元角色:

抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。

享元工厂角色:

负责创建和管理享元角色。

MyCharacter.java
public class MyCharacter { 
    private char mychar; 
 
    public MyCharacter(char mychar) { 
        this.mychar = mychar; 
    } 
 
    public void display() { 
        System.out.println(mychar); 
    } 
}
MyCharacterFactory.java
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; 
    } 
}
MainClass.java
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"); 
        } 
    } 
 
}




分享到:
评论

相关推荐

    设计模式(C#)之享元模式(Flyweight Pattern)

    设计模式(C#)之享元模式(Flyweight Pattern),运用共享技术有效地支持大量细粒度的对象。

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

    享元模式英文称为“Flyweight Pattern”,我非常感谢将Flyweight Pattern翻译成享元模式的那位强人,因为这个词将这个模式使用的方式明白得表示了出来;如果翻译成为羽量级模式或者蝇量级模式等等,虽然可以含蓄的...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    Python设计模式之享元模式原理与用法实例分析

    享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——享元模式 ...

    C#设计模式_设计模式_C#_

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...

    用Java实现23种设计模式

    享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...

    Java设计模式,并加上个人理解

    1. 设计模式 1.1 含义 1.2 作用 1.3 设计原则 1.4 分类 2. 简单工厂模式 (SimpleFactoryPattern) ...15. 享元模式 (Flyweight Pattern) 16. 桥接模式 (Bridge Pattern) 17. 观察者模式 (Observer Pattern)

    C#设计模式(23种设计模式)

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern...

    设计模式PPT

     享元模式(Flyweight Pattern)  代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:  责任链模式(Chain of Responsibility Pattern)  ...

    设计模式代码——c#

    11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern...

    ackFinding#ARTS#第五周 享元模式在jdk应用1

    1.简介享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。2.举例当使用Integer.valueOf创建对象

    23种设计模式 (创建型,结构型,行为型)

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern...

    33种JAVA设计模式DEMO

    享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式...

    关于Flyweight模式应用实践的相关介绍

    什么是Flyweight模式? 享元模式(Flyweight Pattern)是一种软件开发中的设计模式,其主要解决的问题是通过类对象的共享,来避免大量创建拥有相同... 代码如下:///  /// 享元模式Flyweight的实现 ///  /// ”T”&gt;Ty

    32种设计模式

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者...

    详解iOS App设计模式开发中对于享元模式的运用

    专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pattern)。 实现享元模式需要两个关键组件,通常是可共享的享元对象和保存他们的池。某种中央对象维护这个池,并从它返回适当的实例。 运用共享技术...

    design-pattern-java.pdf

    扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 ...

    C#设计模式大全

    一、 享元(Flyweight)模式 二、 单纯享元模式的结构 三、 单纯享元模式的示意性源代码 四、 复合享元模式的结构 五、 一个咖啡摊的例子 六、 咖啡屋的例子 七、 享元模式应当在什么情况下使用 八、 享元...

Global site tag (gtag.js) - Google Analytics