享元模式
一、什么是享元模式
Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。
二、享元模式的结构
三、享元模式的角色和职责
抽象享元角色:
所有具体享元类的父类,规定一些需要实现的公共接口。
具体享元角色:
抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。
享元工厂角色:
负责创建和管理享元角色。
package com.dw.test;
/*抽象享元角色:
所有具体享元类的父类,规定一些需要实现的公共接口。
具体享元角色:
抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。*/
public class Mycharter {
private Character mychar;
public Mycharter(Character mychar){
this.mychar=mychar;
}
public void display() {
System.out.println(mychar);
}
}
package com.dw.test;
import java.util.HashMap;
import java.util.Map;
//享元工厂角色:负责创建和管理享元角色。
public class MycharterFactory {
private Map<Character,Mycharter> pool;
public MycharterFactory(){
pool=new HashMap<Character, Mycharter>();
}
public Mycharter getMyCharter(Character character)
{
Mycharter mycharter=pool.get(character);
if(mycharter==null)
{
mycharter=new Mycharter(character);
pool.put(character, mycharter);
}
return mycharter;
}
}
package com.dw.test;
public class MianClass {
/*
* 一、什么是享元模式
* Flyweight模式也叫享元模式,是构造型模式之 一,它通过与其他类似对象共享数据来减小内存 占用。
* 三、享元模式的角色和职责
* 抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。
* 具体享元角色:抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。
* 享元工厂角色:负责创建和管理享元角色。
*/
public static void main(String[] args) {
Mycharter mycherter = new Mycharter('a');
Mycharter mycherter1 = new Mycharter('b');
Mycharter mycherter2 = new Mycharter('a');
Mycharter mycherter3 = new Mycharter('c');
mycherter.display();
mycherter1.display();
mycherter2.display();
mycherter3.display();
System.out.println(mycherter == mycherter2);
System.out.println("----------------------------");
// 创建享元工厂
MycharterFactory mf = new MycharterFactory();
Mycharter my1 = mf.getMyCharter('a');
Mycharter my2 = mf.getMyCharter('b');
Mycharter my3 = mf.getMyCharter('a');
Mycharter my4 = mf.getMyCharter('c');
my1.display();
my2.display();
my3.display();
my4.display();
System.out.println(my1 == my3);
}
}