`

[原]享元模式-单纯享元

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,Flyweight Pattern,享元模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:

享元模式-单纯享元:



 


package pattern.flyweight.simple;

import java.util.*;

/**
 * 单纯的享元
 * @version 2009-6-25
 * @author Winty(wintys@gmail.com)
 */
public class SimpleFlyweightTest{
    public static void main(String[] args){
        FlyweightFactory f = new FlyweightFactory();

        Flyweight a = f.factory(new Character('a'));
        a.operation("ex");

        Flyweight b = f.factory(new Character('b'));
        b.operation("ex");

        Flyweight c = f.factory(new Character('a'));
        c.operation("ex");

        f.checkFlyweight();
    }
}

/**
 * 抽象享元
 */
abstract class Flyweight{
    public abstract void operation(String extrinsicState);
}

/**
 * 具体享元
 */
class ConcreteFlyweight extends Flyweight{
    private Character intrinsicState;

    public ConcreteFlyweight(Character intrinsicState){
        this.intrinsicState = intrinsicState;
    }

    /**
     * 外蕴状态改变方法行为,但不会改变内蕴状态
     */
    @Override
    public void operation(String extrinsicState){
        String str = "intrinsic:" + intrinsicState;
        str += "   extrinsic:" + extrinsicState;
        System.out.println(str);
    }
}

/**
 * 享元工厂
 */
class FlyweightFactory{
    private Map<Character , Flyweight> map;

    public FlyweightFactory(){
        map = new HashMap<Character , Flyweight>();
    }

    public Flyweight factory(Character state){
        Flyweight flyweight = null;

        if(map.containsKey(state)){
            flyweight = map.get(state);
        }
        else{
            flyweight = new ConcreteFlyweight(state);
            map.put(state , flyweight);
        }

        return flyweight;
    }

    /**
     * 辅助方法
     */
    public void checkFlyweight(){
        Iterator<Map.Entry<Character , Flyweight>> it
            = map.entrySet().iterator();
        System.out.println("check flyweight:");
        while(it.hasNext()){
            Map.Entry<Character , Flyweight> entry = it.next();
            Character key = entry.getKey();
            System.out.println("key:" + key);
        }
    }
}


运行结果:
intrinsic:a   extrinsic:ex
intrinsic:b   extrinsic:ex
intrinsic:a   extrinsic:ex
check flyweight:
key:b
key:a

  • 大小: 44.9 KB
分享到:
评论

相关推荐

    2 享元模式-课程内容.rar

    具体到这个“2 享元模式-课程内容.rar”文件中的MOOC课程内容,可能包含了以下几个知识点: 1. **享元模式的概念**:解释什么是享元模式,以及它如何通过对象共享来提高性能。 2. **内部状态与外部状态**:详细...

    享元模式 - Java 设计模式 - 示例代码

    享元模式的标准定义代码,以及一个五子棋的示例代码。

    设计模式-享元模式(讲解及其实现代码)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...

    JAVA-设计模式-结构型模式-享元模式

    JAVA-设计模式-结构型模式-享元模式

    设计模式--享元模式

    设计模式--享元模式

    6.设计模式-享元模式1

    设计模式-享元模式 设计模式是软件设计中的一种解决方案,旨在提高代码的可维护性、灵活性和可重用性。享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和...

    软件设计模式——享元模式设计报告

    享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...

    java常用设计模式-享元模式

    java常用设计模式-享元模式

    【Java设计模式-源码】享元模式

    Java中的享元设计模式对于优化内存使用和提高应用程序性能至关重要。通过最小化创建的对象数量,它显著减少了内存占用。享元模式的主要目标是在相似对象之间尽可能多地共享数据,从而提高效率和性能。 ## 二、详细...

    享元模式代码+文档

    享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存占用的目的。在软件工程中,当一个系统需要处理大量相似对象时,享元模式能够有效地提升性能,尤其在处理轻量级对象时...

    设计模式----命令模式

    享元模式通常与Flyweight接口、Concrete Flyweight(具体享元)、Flyweight Factory(享元工厂)三个角色一起工作,工厂负责创建和管理享元对象,确保享元对象的复用,避免因创建过多的实例导致内存开销过大。...

    Java设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...

    学习php设计模式 php实现享元模式(flyweight)

    - 组合模式(Composite):复合享元模式实际上是单纯享元模式与合成模式的组合,允许树叶节点作为单纯享元对象进行共享,而树枝节点作为复合享元对象存在。 六、享元模式PHP示例代码 在PHP中实现享元模式的示例代码...

    享元模式的分析以及实际应用.docx

    享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...

    第15章_享元模式.ppt

    在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...

    javascript 设计模式之享元模式原理与应用详解

    说明: 享元模式分单纯(共享)享元模式,以及组合(不共享)享元模式,有共享跟不共享之分;单纯享元模式,只包含共享的状态,可共享状态是不可变,不可修改的,这是享元的内部状态;当然有外部状态就有外部状态,...

    fly-weight-demo享元模式示例

    享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存消耗和提高性能的目的。在Java编程中,享元模式通常用于处理大量相似对象的场景,例如在图形界面、文本渲染或者数据库...

    最简单的简单享元模式

    享元模式是一种优化资源使用的软件设计模式,尤其适用于大量对象的场景,通过共享技术来有效支持大量细粒度的对象。这种模式的核心在于减少内存中对象的数量,以提高系统性能。在"最简单的简单享元模式"中,我们将...

    享元模式介绍

    设计模式中的享原模式技术入门,可用于各种说明场合,一看就会哦

    装饰器模式、原型模式、享元模式

    装饰器模式、原型模式和享元模式是软件设计模式中的三种重要模式,它们在实际项目开发中被广泛应用,以提高系统的性能和可维护性。下面将详细解释这三种设计模式的概念、应用场景及其实现方式。 **装饰器模式...

Global site tag (gtag.js) - Google Analytics