`
duolaaqian
  • 浏览: 14437 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

[初级]设计模式--享元模式

阅读更多
/**
 * 享元模式
 * 
 * 如果程序中存在大量的对象,并且对象之间也较为类似
 * 这样,对象之间类似的部分就可以共享出来,这样就减少了内存开销
 * 
 * 1、具体实体类(大量对象中可共享部分)
 * 2、工厂类(共享池,返回已有对象或创建新对象)
 * 3、外部状态(大量对象中可不共享部分)
 * 
 * 优点:
 * 	1、节省内存开销
 * 缺点:
 * 	1、增加了系统度
 * 	2、虽然节省了内存,但增加了运行时长
 * 
 * 场景:
 * 	1、五子棋
 * 		共享部分:颜色(黑、白)
 * 		分共享部分:位置(1...361)
 * 	2、String 常量池
 */
public class FlyWeightDemo01 {
	public static void main(String[] args) {
		IChess c1 = ChessFactory.getChess("黑");
		IChess c2 = ChessFactory.getChess("黑");
		IChess c3 = ChessFactory.getChess("红");
		IChess c4 = ChessFactory.getChess("红");
		IChess c5 = ChessFactory.getChess("黑");
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println(c4);
		System.out.println(c5);
		c1.display(new Coordinate(10,10));
		c2.display(new Coordinate(20,20));
		c3.display(new Coordinate(30,30));
		c4.display(new Coordinate(40,40));
		c5.display(new Coordinate(50,50));
	}
}
/**
 * 棋子接口
 */
interface IChess{
	void setColor(String color);
	void display(Coordinate c);
}
/**
 * 位置类
 */
class Coordinate{
	int x,y;
	public Coordinate(int x,int y){
		this.x = x;
		this.y = y;
	}
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
}
/**
 * 具体棋子实现类
 */
class ConcreteChess implements IChess{
	String color;
	@Override
	public void setColor(String color) {
			this.color = color;
	}
	@Override
	public void display(Coordinate c) {
		System.out.println("棋子:["+this.color+"]["+c.getX()+"]["+c.getY()+"]");
	}
}
/**
 * 棋子工厂
 */
class ChessFactory{
	private static Map<String,IChess> map = new Hashtable<String,IChess>();
	public static IChess getChess(String color){
		if( null!=map.get(color) ){
			return map.get(color);
		}else{
			IChess c = new ConcreteChess();
			c.setColor(color);
			map.put(color, c);
			return c;
		}
	}
}

 

执行结果:

com.dlaq.test.gof.flyweight.ConcreteChess@1901437
com.dlaq.test.gof.flyweight.ConcreteChess@1901437
com.dlaq.test.gof.flyweight.ConcreteChess@1f6226
com.dlaq.test.gof.flyweight.ConcreteChess@1f6226
com.dlaq.test.gof.flyweight.ConcreteChess@1901437
棋子:[黑][10][10]
棋子:[黑][20][20]
棋子:[红][30][30]
棋子:[红][40][40]
棋子:[黑][50][50]

 

分享到:
评论

相关推荐

    研磨设计模式-part2

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part4

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part3

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    C/C++设计模式基础教程

    - **享元模式**:通过共享技术有效支持大量细粒度的对象。 3. **行为型模式**:关注于对象间的交互和职责分配。 - **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - **命令模式**:将...

    java23种设计模式详细讲解

    设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...

    java开发设计模式

    对于不同级别的程序员,设计模式能够提供不同程度的帮助和指导,从初级程序员的基础编程技能提升,到高级程序员的系统设计和架构,再到系统分析师的项目问题解决,设计模式都能发挥关键作用。 在应用设计模式时,...

    研磨设计模式(完整带书签).part1.pdf

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    Java中23种经典设计模式(附代码)

    对于一个Java初级工程师来说,掌握设计模式是提升到高级工程师的关键步骤,因为设计模式能提高代码的可读性、可维护性和可扩展性。 1. **创建型模式**: - **工厂方法**:定义一个用于创建对象的接口,让子类决定...

    Java设计模式经典搞笑珍藏

    初级程序员可以学习如何编写优秀的代码,高级程序员可以更全面地了解设计模式和Java的使用技巧,系统分析师则能够寻找到解决项目共性问题的方法。 ### 总结 《Java设计模式经典搞笑珍藏》这本书通过将设计模式的...

    一天学通Java23种设计模式

    此外,还有其他设计模式,如模板方法(Template Method)、访问者(Visitor)、迭代器(Iterator)、命令(Command)、备忘录(Memento)、解释器(Interpreter)和享元(Flyweight)。每个模式都有其特定的使用场景...

    23种GoF设计模式Java版.pdf

    **12 享元模式** - 运用共享技术有效地支持大量细粒度的对象。 **13 模板方法模式** - 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

    java设计模式

    23. **享元模式 (Flyweight Pattern)** - **定义**:运用共享技术有效地支持大量细粒度的对象。 24. **备忘录模式 (Memento Pattern)** - **定义**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象...

    CC++与设计模式基础课程_讲义

    - **初级开发人员**:需要培养批判性思维能力,不断思考和梳理现有设计模式,找到最佳实践。 - **中级开发人员**:在特定的开发环境中灵活选择和应用设计模式,通过实践不断提升自己的技术水平。 #### 五、设计模式...

Global site tag (gtag.js) - Google Analytics