Flyweight 享元模式

 

 

注:享元模式是结构型设计模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).

 

很多细粒度对象,只用部分状态不同,大部分是相同的。为了减少内存开销,我们可以利用享元模式,通过一个对象来代替多个对象,实现需求。

 

享元模式中有个很经典的例子,字母的享元使用。

 

Java简单代码实现

字母类

 

package com.pattern.structure.flyweight;

 

public class Letter {

 

private String color ;

 

private String name ;

 

public String getColor() {

return color;

}

 

public void setColor(String color) {

this.color = color;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public void display() {

System.out.println(color + "  " + name);

}

}

 

 

 

字母工厂类

 

package com.pattern.structure.flyweight;

 

import java.util.HashMap;

import java.util.Map;

 

 

public class LetterFactory {

 

private static Map<String, Letter> letterMap = new HashMap<>() ;

 

public static Letter getRedLetter(String letterName) {

 

Letter letter = getLetter(letterName) ;

letter.setColor("red");

 

return letter ;

}

 

public static Letter getBlackLetter(String letterName) {

 

Letter letter = getLetter(letterName) ;

letter.setColor("black");

 

return letter ;

}

 

public static Letter getLetter(String letterName) {

 

Letter letter = null ;

if(letterMap.containsKey(letterName) ) {

letter = letterMap.get(letterName) ;

} else {

letter = new Letter() ;

letter.setName(letterName); 

letterMap.put(letterName, letter) ;

}

 

return letter ;

}

 

public static int getObjectSize() {

 

return letterMap.size() ;

}

}

 

 

 

客户端类

 

package com.pattern.structure.flyweight;

 

public class Client {

 

 

public static void main(String[] args) {

 

Letter aRed = LetterFactory.getRedLetter("a") ;

aRed.display(); 

 

Letter bRed = LetterFactory.getRedLetter("b") ;

bRed.display(); 

 

Letter aBlack = LetterFactory.getBlackLetter("a") ;

aBlack.display(); 

 

Letter bBlack = LetterFactory.getBlackLetter("b") ;

bBlack.display(); 

 

System.out.println("object size: " + LetterFactory.getObjectSize());

}

}

 

 

 

运行客户端程序可以看出,我们使用了4个对象,实际只创建了两个对象,如果颜色多种,效果更明显。

 

 

享元模式通用类图

 

 

 

 

 

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

 

 

 

 

转载于:https://www.cnblogs.com/sten/p/3353258.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值