设计模式(十一):享元模式

92 阅读1分钟

介绍

享元模式(Flyweight Pattern)属于结构型模式。尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。主要用于减少创建对象的数量,以减少内存占用和提高性能。

优点

  • 大大减少对象的创建,降低系统的内存,使效率提高

缺点

  • 提高了系统的复杂度,需要分离出对象之间的异同,而且相同属性一旦变化,就会变得混乱

应用

系统有大量相似对象时

实现

关键代码:用hashmap存储,减少创建对象消耗资源

import java.util.HashMap;

interface Career {
    void introduce();
}

class Hero implements Career {
    private String name;
    private String career;

    public Hero(String career){
       this.career = career;
    }

    public void setName(String name) {
        this.name = name;
     }

    @Override
    public void introduce() {
       System.out.println("I am "+career+",named "+name);
    }
}

class HeroFactory {
    private static final HashMap<String, Hero> Map = new HashMap<>();
  
    public static Hero getHero(String career) {
       Hero hero = (Hero)Map.get(career);

       if(hero == null) {
          hero = new Hero(career);
          Map.put(career, hero);
          System.out.println("Creating new career of hero : " + career);
       }
       return hero;
    }
}

class Demo {
    public static void main(String[] args) {
        String[] careerList = {"assassin","warrior","assassin"};
        String[] heroList = {"Jack","Marry","Tom"};
        for (int i = 0; i < heroList.length; i++) {
            Hero hero = HeroFactory.getHero(careerList[i]);
            hero.setName(heroList[i]);
            hero.introduce();
        }
    }
}

运行结果:

Creating new career of hero : assassin
I am assassin,named Jack
Creating new career of hero : warrior
I am warrior,named Marry
I am assassin,named Tom