java设计模式_享元模式

一、什么是享元模式

Flyweight模式也叫享元模式,是构造型模式之 一,它通过与其他类似对象共享数据来减小内存 占用。


二、享元模式的结构

这里写图片描述

三、享元模式的角色和职责

抽象享元角色:
所有具体享元类的父类,规定一些需要实现的公共接口。 具体享元角色:
抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 享元工厂角色: 负责创建和管理享元角色。

//示例1:
public class MyCharacter {//享元角色

    private char mychar;

    public MyCharacter(char mychar)
    {
        this.mychar = mychar;
    }

    public void display()
    {
        System.out.println(mychar);
    }

}

import java.util.HashMap;
import java.util.Map;

public class MyCharacterFactory {//享元工厂

    private Map<Character,MyCharacter> pool;

    public MyCharacterFactory()
    {
        pool = new HashMap<>();
    }

    public MyCharacter getMyCharacter(Character character)
    {
        MyCharacter myChar = pool.get(character);
        if(myChar == null)
        {
            myChar = new MyCharacter(character);
            pool.put(character, myChar);
        }
        return myChar;
    }

}

public class MainClass {
    public static void main(String[] args) {
/*      MyCharacter m1 = new MyCharacter('a');
        MyCharacter m2 = new MyCharacter('b');
        MyCharacter m3 = new MyCharacter('a');
        MyCharacter m4 = new MyCharacter('d');

        m1.display();
        m2.display();
        m3.display();
        m4.display();

        if(m1 == m3)
        {
            System.out.println("true");
        } else {
            System.out.println("false");
        }*/
        /*
        //a
        //b
        //a
        //d
        //true
        //
        */

        //1.创建MyCharacter工厂
        MyCharacterFactory factory = new MyCharacterFactory();

        //2.从工厂中取出相应的MyCharacter
        MyCharacter m1 = factory.getMyCharacter('a');
        MyCharacter m2 = factory.getMyCharacter('b');
        MyCharacter m3 = factory.getMyCharacter('a');
        MyCharacter m4 = factory.getMyCharacter('d');

        m1.display();
        m2.display();
        m3.display();
        m4.display();

        if(m1 == m3)
        {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

    }

}

//a
//b
//a
//d
//true
//

//示例2:

public class Teacher {

    private String number;

    public void setNumber(String number) {
        this.number = number;
    }

    public String getNumber() {
        return number;
    }

    public Teacher(){
        super();
    }
}
import java.util.HashMap;
import java.util.Map;

public class TeacherFactory {

    public Map<String,Teacher> pool;

    public TeacherFactory() {
        pool = new HashMap<>();
    }

    public Teacher getTeacher(String number)
    {
        Teacher teacher = pool.get(number);
        if(teacher == null)
        {
            teacher = new Teacher();
            teacher.setNumber(number);
            pool.put(number, teacher);
        }
        return teacher;
    }
}
public class MainClass {

    public static void main(String[] args) {
        TeacherFactory factory = new TeacherFactory();
        Teacher teacher1 = factory.getTeacher("0102034");
        Teacher teacher2 = factory.getTeacher("0102035");
        Teacher teacher3 = factory.getTeacher("0102034");
        Teacher teacher4 = factory.getTeacher("0102037");

        System.out.println(teacher1.getNumber());
        System.out.println(teacher2.getNumber());
        System.out.println(teacher3.getNumber());
        System.out.println(teacher4.getNumber());

        if(teacher1 == teacher3)
        {
            System.out.println("true");
        } else
            System.out.println("false");
    }

}

//0102034
//0102035
//0102034
//0102037
//true





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值