享元模式(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常用设计模式-享元模式
设计模式-享元模式 设计模式是软件设计中的一种解决方案,旨在提高代码的可维护性、灵活性和可重用性。享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...
JAVA-设计模式-结构型模式-享元模式
设计模式--享元模式
c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...
享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的场景。在Java编程中,享元模式通过共享已有对象来减少内存中的对象数量,从而提高性能。这种模式的核心是实现细粒度对象的...
Flyweight:享元对象IntrinsicState:内部状态,享元对象共享内部状态ExtrinsicState:外部状态,每个享元对象的外部状态不同pub
享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
Java中的享元设计模式对于优化内存使用和提高应用程序性能至关重要。通过最小化创建的对象数量,它显著减少了内存占用。享元模式的主要目标是在相似对象之间尽可能多地共享数据,从而提高效率和性能。 ## 二、详细...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
享元模式是一种优化资源使用的软件设计模式,尤其适用于大量对象的场景。在C++编程中,享元模式通过共享技术来有效地支持大量细粒度的对象,以减少内存消耗。此模式的核心是运用共享技术来存储和管理具有相同状态的...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
- 享元模式(Flyweight):使用共享对象,有效地支持大量细粒度的对象。 3. **行为型模式**:这类模式关注对象之间的责任分配。 - 责任链模式(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到提高系统性能的目的。在大型软件系统中,特别是在处理大量相似对象时,享元模式能够有效地减少内存开销,提高系统运行效率。在这...
享元模式则是一种结构型设计模式,它能通过共享技术有效地支持大量细粒度的对象。当系统中存在大量相似对象时,享元模式可以极大地减少内存的占用。享元模式通常与Flyweight接口、Concrete Flyweight(具体享元)、...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在大量对象创建时。享元模式通过共享已有对象来减少内存中对象的数量,从而达到降低内存消耗的效果。这种模式适用于那些轻量级对象,...