java设计模式之享元模式

定义一个公用的内部

public interface ClessFlyWeight {
void setColor(String c);
String getColor();
void display(Coordinate c);
}
class ConcreteChess implements ClessFlyWeight{

private String color;

public ConcreteChess(String color) {
super();
this.color = color;
}

@Override
public String getColor() {
// TODO Auto-generated method stub
return color;
}

@Override
public void setColor(String c) {
// TODO Auto-generated method stub
this.color=c;
}

@Override
public void display(Coordinate c) {
// TODO Auto-generated method stub
System.out.println("棋子颜色"+color);
System.out.println("棋子位置:"+c.getX()+c.getY());
}

}

定义享元工厂

/**
*
* 享元工厂类
* @author zzdxw
*
*/
public class ClessFlyWeightFactory {
//享元池
private static Map<String, ClessFlyWeight> map=new HashMap<String ,ClessFlyWeight>();
public static ClessFlyWeight getChess(String color){
if(map.get(color)!=null){
return map.get(color);
}else{
ClessFlyWeight cfw=new ConcreteChess(color);
map.put(color,cfw);
return cfw;
}
}
}

//定义一个外部的

public class Coordinate {
private int x,y;

public Coordinate(int x, int y) {
super();
this.x = x;
this.y = y;
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

}

//客户端测试一下

public class Client {
public static void main(String[] args) {
ClessFlyWeight chess1=ClessFlyWeightFactory.getChess("黑色");
ClessFlyWeight chess2=ClessFlyWeightFactory.getChess("黑色");
System.out.println(chess1);
System.out.println(chess2);
}
}

时间: 2024-10-13 11:58:11

java设计模式之享元模式的相关文章

Java设计模式之享元模式实例详解

本文实例讲述了Java设计模式之享元模式.分享给大家供大家参考,具体如下: 解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象.如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了.那么如果要是每个字母都共享一个对象,那么就大大节约了资源. 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweigh

浅谈JAVA设计模式之——享元模式(Flyweight)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45568799 一.概述 运用共享技术有效地支持大量细粒度的对象. 二.适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对

设计模式之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri

纵横之设计模式(享元模式-性能与对象访问)

声明:本系列文章内容摘自<iOS设计模式> 享元模式:运用共享技术有效地支持大量细粒度的对象. 何为享元模式 实现享元模式需要两个关键组件,通常是可共享的享元对象和保存它们的池.某种中央对象维护这个池,并从它返回适当的实例,工厂是这一角色的理想候选.它可以通过一个工厂方法,根据父类型返回各种类型的具体享元对象.其主要目的就是维护池中的享元对象,并适当的从中返回享元对象. 何时使用享元模式 1.应用程序使用很多对象: 2.在内存中保存对象会影响内存性能: 3.对象的多处持有状态(外在状态)可以放

大话设计模式_享元模式(Java代码)

享元模式:运用共享技术有效的支持大量细粒度的对象. 简单描述:1个享元工厂,提供各种类型的享元.如果这些享元存在于工厂对象中,则直接提出给客户端,如果没有,则新建享元并存储起来,同时提供给客户端.享元的外部状态可以由客户端存储并在调用相关需要外部状态的操作时由客户端传入 大话设计模式中的截图: 代码例子: User类: 1 package com.longsheng.flyweight; 2 3 //外部状态 4 public class User { 5 6 private String na

Java进阶篇设计模式之七 ----- 享元模式和代理模式

前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 用通俗的话来说就是进行共用.生活中也有一些例子,比如之前很火的共享单车,更早之前的图书馆,编程中经常用的String类,数据库连接池等等.当然,享元模式主要的目的是复用,如果该对象没有的话,就会进行创建. 享

Java二十三设计模式之------享元模式

一.享元模式(Flyweight) 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类.一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就

设计模式:享元模式(Flyweight)

?运用共享技术有效地支持大量细粒度的对象.又名"蝇量模式". ?在Java语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝.譬如: String a = "abc"; String b = "abc"; System.out.println(a==b); ?输出结果:true.这就说明了a和b量引用都指

设计模式之享元模式--- Pattern Flyweight

模式的定义 享元模式(Flyweight Pattern)是沲技术的重要实现方式,其定义如下: Use sharing to support large numbers of fine-grained objects efficiently. 使用共享对象可有效地支持大量的细粒度的对象. 享元模式的定义提出了二个要求:细粒度的对象和共享对象.分配太多的对象将有损程序的性能,同时还容易造成内存溢出.避免这种情况,就是使用享元模式中的共享技术. 细粒度的状态分为内部状态(instrinsic)和外部