gpt4 book ai didi

java - Java 中的身份映射模式真实示例

转载 作者:行者123 更新时间:2023-11-30 06:13:03 25 4
gpt4 key购买 nike

我正在努力获取 Java 中的身份映射模式现实生活(行业实现)示例。

我一直在研究《企业应用程序架构模式》一书的身份映射模式。

我了解这种模式的用法和适用性,但我还没有找到任何现实世界的例子。

您能提供这种设计模式的实际示例吗?

最佳答案

对于初学者:here是一篇关于身份映射模式现实生活示例的好文章。

额外的重要待遇:here是上面提到的企业应用程序架构模式(作者:Martin Fowler!)的链接。

至于这里的实际示例:我认为这种模式(以及我读过的其他几个来源)在精神上与延迟初始化类似。

基本且反复出现的概念是:您有一个想要检索的重量级对象(通常是数据库实体,但没有理由仅限于数据库),并且您使用映射来存储如果 Map 中尚不存在该对象的新实例。

所以请记住这一点(这又快又脏,没有适当的泛型等......):

import java.util.*;
import java.util.stream.*;

interface HeavyWeightInterface {
public String myToString();
}

class ConcreteHeavyWeight implements HeavyWeightInterface {
private static final int NUMBER_OF_OBJECTS = 100000;
// non DB heavy class
private String base;
private List<String> dummyObjects;

public ConcreteHeavyWeight(String keyBase) {
this.base = keyBase;
this.dummyObjects = new ArrayList<>();
IntStream.range(0, NUMBER_OF_OBJECTS).forEach(
nbr -> {
dummyObjects.add(base + " : " + nbr);
});
}

public String myToString() {
return "My base is : " + base + " with an internal DS of " + dummyObjects.size() + " entities";
}
}

interface HeavyWeightFactory {
public HeavyWeightInterface build(String key);
}

class ConcreteHeavyWeightFactory implements HeavyWeightFactory{
public HeavyWeightInterface build(String key) {
return new ConcreteHeavyWeight(key);
}
}

class IdentityMap {

private Map<String,HeavyWeightInterface> internalMap;
private HeavyWeightFactory hwfactory;
public IdentityMap(HeavyWeightFactory hwfactory) {
this.internalMap = new HashMap<>();
this.hwfactory = hwfactory;
}
public HeavyWeightInterface retreive(String key) {
if(!internalMap.containsKey(key)) {
internalMap.put(key,hwfactory.build(key));
}
return internalMap.get(key);
}

}

public class MyClass {
public static void main(String[] args){
IdentityMap im = new IdentityMap(new ConcreteHeavyWeightFactory());
HeavyWeightInterface hw0 = im.retreive("Test0");
im.retreive("Test1");
im.retreive("Test2");
im.retreive("Test3");
HeavyWeightInterface hw1 = im.retreive("Test0");
System.out.println("First call with Test0 key = " + hw0 + ", Second call with Test0 key = " + hw1);
System.out.println(hw1.myToString());
}
}

输出是:

First call with Test0 key = ConcreteHeavyWeight@224aed64, Second call with Test0 key = ConcreteHeavyWeight@224aed64
My base is : Test0 with an internal DS of 100000 entities

关于java - Java 中的身份映射模式真实示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com