设计模式-结构型-享元模式

98 阅读1分钟

简介

享元模式是结构型模式的一种,主要是为了解决系统中大量创建相同对象而设计的,其实现比较简单。在一个大型系统中,往往需要大量创建重复对象,而对于一些重复的大对象,创建和销毁需要消耗大量的系统资源,这无疑增加了系统的负担,因此,享元模式诞生了。其核心实现是将创建的对象存入map中,当需要时从map中取,如果map中没有则创建完成后存入map。

代码示例

以创建一个苹果为例 1.首先定义一个苹果类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Apple {
    private String color;
    private String place;

    public boolean isEquals(String color, String place) {
        return this.color.equals(color) && this.place.equals(place);
    }
}

2.定义一个创建苹果的工厂。

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

public class AppleFactory {
    private static final Map<String, Apple> apps = new HashMap<>();

    public static Apple createApple(String color, String birth) {
        if (apps.containsKey(color) && apps.get(color).isEquals(color, birth)) {
            return apps.get(color);
        }
        Apple apple = new Apple(color, birth);
        apps.put(color, apple);
        return apple;
    }
}

3.客户端调用

public class Test {
    public static void main(String[] args) {
        Apple apple1 = AppleFactory.createApple("red", "north");
        Apple apple2 = AppleFactory.createApple("red", "north");
        Apple apple3 = AppleFactory.createApple("green", "south");
        System.out.println(apple1 == apple2);//true
        System.out.println(apple1 == apple3);//false
    }
}

可以看出,apple1与apple2相等,是同一个对象,而与apple3不同。