享元模式

通常情况下,我们会需要使用某个对象的时候会直接new,然后使用完后就等着垃圾回收器回收,但是如果访问量比较大new的对象比较多,那么很有可能会造成内存数据过大甚至是溢出的情况。享元模式最主要的目的就是解决减少大量创建新的对象,让多个对象引用公用缓存中的同一个对象。有点类始于连接池,当你需要的时候返回一个你所需的对象一样。
享元模式一共包含2个重要概念,一个是内蕴状态和外蕴状态。两种状态的充当者你可以根据自己的需要进行实现。
内蕴状态表示多个对象共享的部分。
外蕴状态表示每个对象独有的状态部分。
如现实中的聊天软件,你同时跟很多用户聊天,但不是你每次和某个用户的发送数据时都创建一个对象。而是多次公用一个对象,这就是使用了享元模式。
享元模式的组成元素:
享元接口:用于定义让具体享元实现的规范(定义方法)。
具体享元:实现享元接口。然后根据需要定义内蕴状态,可以是对象集合等等。就是共享的数据。然后定义一个外蕴状态。
定一个一个工厂方法,用户容纳各个具体享元元素,根据调用出需要返回合适的享元对象。
实例
抽象享元
public interface FlyWeight{
//提供给具体享元元素一个操作的方法,该方法是接收外蕴状态的
void operator();
//这里定义一个显示内蕴和外蕴状态的方法
void display();
}
定义具体享元元素A:
public class FlyWeightA implements FlyWeight{
//定义内蕴状态这里定一个从数据库查询出的集合
private List list;
//定义一个外蕴状态,用于接收外部的状态然后执行外部的特殊需求
private String outDesc;//可以根据自己的需求定义

public FlyWeightA(){

}

void operate(String outDesc){
this.outDesc = outDesc;
//通过内蕴和外蕴实现所需要的逻辑
sysout(outDesc);
}

void show(){
//输出内蕴和外蕴状态
}

}

定义具体享元元素B:
public class FlyWeightB implements FlyWeight{
//定义内蕴状态这里定一个从数据库查询出的集合
private List list;
//定义一个外蕴状态,用于接收外部的状态然后执行外部的特殊需求
private String outDesc;//可以根据自己的需求定义

public FlyWeightB(){

}

void operate(String outDesc){
this.outDesc = outDesc;
//通过内蕴和外蕴实现所需要的逻辑
sysout(outDesc);
}

void show(){
//输出内蕴和外蕴状态
}
}

定义工厂元素
public class FlyWeightFactory{
private HashTable hash = new HashTable ();

public FlyWeightFactory(){
//分别生成A和B对象然后放入hash中
}

public FlyWeight get(String key){
//根据不同的key返回所需要的FlyWeight
}

}

//然后进行调用
main(){
FlyWeightFactory factory = new FlyWeightFactory();
//生产A
FlyWeight aFlyWeight = factory.get("A");
aFlyWeight.operator("a access");
//生产b
FlyWeight aFlyWeight = factory.get("b");
aFlyWeight.operator("b access");

//生产A
FlyWeight aFlyWeight = factory.get("A");
aFlyWeight.operator("A access");
//实际上返回的还是第一个对象,只是可以外蕴不同罢了
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值