`
DanielHan
  • 浏览: 57399 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
074641d7-eb86-343f-a745-65a0f693edb5
设计模式
浏览量:7377
社区版块
存档分类
最新评论

设计模式-享元模式

阅读更多
享元模式(Flyweight Pattern)
享元模式,以共享的方式高效地支持大量的细粒度对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。

以黑白五子棋为例
public abstract class Chessman {

	private String color;
	private int x;
	private int y;
	
	public Chessman(String color){
		this.color=color;
	}
	
	//设置棋子位置
	public void setPosition(int x,int y){
		this.x=x;
		this.y=y;
	}

	public String getColor() {
		return color;
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}
}


public class BlackChessman extends Chessman{
	public BlackChessman() {
		super("黑棋子");
		System.out.println("创建黑棋子");
	}
}


public class WhiteChessman extends Chessman{
	public WhiteChessman() {
		super("白棋子");
		System.out.println("创建白棋子");
	}
}


public class ChessmanFactory {
	private static ChessmanFactory ChessmanFactory=new ChessmanFactory();
	//缓存存放共享对象
	Hashtable<Character, Chessman> cache=new Hashtable<Character, Chessman>();
	
	public static ChessmanFactory getInstance(){
		return ChessmanFactory;
	}
	//获取棋子
	public Chessman getChessman(char c){
		Chessman chessman=this.cache.get(c);
		if(chessman==null){
			if(c=='W'){
				chessman=new WhiteChessman();
			}else if(c=='B'){
				chessman=new BlackChessman();
			}
			cache.put(c, chessman);
		}
		return chessman;
	}
}


public class Demo {
	public static void main(String[] args) {
		ChessmanFactory factory=ChessmanFactory.getInstance();
		Chessman chessman1=factory.getChessman('W');
		chessman1.setPosition(1, 1);
		System.out.println(chessman1.getColor()+" ("+chessman1.getX()+","+chessman1.getY()+")");
		Chessman chessman2=factory.getChessman('W');
		chessman2.setPosition(2, 2);
		System.out.println(chessman2.getColor()+" ("+chessman2.getX()+","+chessman2.getY()+")");
		Chessman chessman3=factory.getChessman('B');
		chessman3.setPosition(3, 3);
		System.out.println(chessman3.getColor()+" ("+chessman3.getX()+","+chessman3.getY()+")");
		Chessman chessman4=factory.getChessman('B');
		chessman4.setPosition(4, 4);
		System.out.println(chessman4.getColor()+" ("+chessman4.getX()+","+chessman4.getY()+")");
	}
}


测试结果
创建白棋子
白棋子 (1,1)
白棋子 (2,2)
创建黑棋子
黑棋子 (3,3)
黑棋子 (4,4)


享元模式的两种状态:内蕴状态和外蕴状态
1.内蕴状态:
  享元模式的内蕴状态是不会随环境的改变而改变的,是存储在享元对象内部的状态信息,因此内蕴状态是可以共享的,对于任何一个享元对象来讲,它的值是完全相同的。就像上面例子中的“黑子”和“白子”,它代表的状态就是内蕴状态。
2.外蕴状态
  外蕴状态会随环境的变化而改变的,因此是不可共享的状态,对于不同的享元对象来讲,它的值可能是不同的。享元对象的外蕴状态必须由客户端保存,在享元对象被创建之后,需要使用的时候再传入到享元对象的内部。就像五子棋的位置信息,代表的状态就是享元对象的外蕴状态。

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    设计模式--享元模式

    设计模式--享元模式

    c++设计模式-结构型模式-享元模式

    c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...

    java基础设计模式模式 - 享元模式.7z

    享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的场景。在Java编程中,享元模式通过共享已有对象来减少内存中的对象数量,从而提高性能。这种模式的核心是实现细粒度对象的...

    XiaokangLei#CS-Notes-Plus#设计模式 - 享元1

    Flyweight:享元对象IntrinsicState:内部状态,享元对象共享内部状态ExtrinsicState:外部状态,每个享元对象的外部状态不同pub

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

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

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

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

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

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    cpp代码-设计模式-享元模式

    享元模式是一种优化资源使用的软件设计模式,尤其适用于大量对象的场景。在C++编程中,享元模式通过共享技术来有效地支持大量细粒度的对象,以减少内存消耗。此模式的核心是运用共享技术来存储和管理具有相同状态的...

    设计模式的享元模式的例子

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 享元模式(Flyweight):使用共享对象,有效地支持大量细粒度的对象。 3. **行为型模式**:这类模式关注对象之间的责任分配。 - 责任链模式(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起...

    设计模式专题之(十二)享元模式---设计模式享元模式示例代码(python--c++)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到提高系统性能的目的。在大型软件系统中,特别是在处理大量相似对象时,享元模式能够有效地减少内存开销,提高系统运行效率。在这...

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

    享元模式则是一种结构型设计模式,它能通过共享技术有效地支持大量细粒度的对象。当系统中存在大量相似对象时,享元模式可以极大地减少内存的占用。享元模式通常与Flyweight接口、Concrete Flyweight(具体享元)、...

    设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在大量对象创建时。享元模式通过共享已有对象来减少内存中对象的数量,从而达到降低内存消耗的效果。这种模式适用于那些轻量级对象,...

Global site tag (gtag.js) - Google Analytics