python 享元模式_享元模式(Flyweight)

享元模式

一. 享元模式

1.1 定义

运用共享技术有效的支持大量细粒度的对象.

二. 具体实现

2.1 创建对象接口

public interface IFlyweight {

void print();

}

2.2 创建具体对象

public class Flyweight implements IFlyweight {

private String id;

public Flyweight(String id){

this.id = id;

}

@Override

public void print() {

System.out.println("Flyweight.id = " + getId() + " ...");

}

public String getId() {

return id;

}

}

2.3 创建工厂

public class FlyweightFactory {

private Map flyweightMap = new HashMap();

public IFlyweight getFlyweight(String str){

IFlyweight flyweight = flyweightMap.get(str);

if(flyweight == null){

flyweight = new Flyweight(str);

flyweightMap.put(str, flyweight);

}

return flyweight;

}

public int getFlyweightMapSize(){

return flyweightMap.size();

}

}

2.4 调用

public static void main(String[] args) {

FlyweightFactory flyweightFactory = new FlyweightFactory();

IFlyweight flyweight1 = flyweightFactory.getFlyweight("A");

IFlyweight flyweight2 = flyweightFactory.getFlyweight("B");

IFlyweight flyweight3 = flyweightFactory.getFlyweight("A");

flyweight1.print();

flyweight2.print();

flyweight3.print();

System.out.println(flyweightFactory.getFlyweightMapSize());

}

2.5 输出

Flyweight.id = A ...

Flyweight.id = B ...

Flyweight.id = A ...

2

三. 优缺点

3.1 优点

减少对象的创建,节省内存.

3.2 缺点

提升了系统的复杂性.

四. 源码

https://github.com/Seasons20/DisignPattern.git

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值