java设计模式_享元模式

来源:互联网 发布:360云盘 linux客户端 编辑:程序博客网 时间:2024/06/05 11:21

一、什么是享元模式

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
原创粉丝点击