【发布时间】:2021-02-15 14:50:14
【问题描述】:
我正在尝试为 HashMap 实现装饰器设计模式。
我有两个装饰器——“UpperCaseHashMap”和“AddHashMap”。
实施 1:-
但是,结果映射只包含其中一个装饰器的效果,例如:-
-
只有 AddHashMap 效果,即结果是 - {AA=AA}
Map
map = new AddHashMap(new UpperCaseHashMap(new HashMap ())); map.add("aa", "aa"); System.out.println(map); -
只有 UpperCaseHashMap 效果,即结果是 - {aaADDED_BY_DECORATOR=aa}
Map
map = new UpperCaseHashMap(new AddHashMap(new HashMap ())); map.add("aa", "aa"); System.out.println(map);
下面是装饰器类的代码:-
public class UpperCaseHashMap<K, V> extends HashMap<K, V> {
/**
*
*/
private static final long serialVersionUID = 1L;
Map<K, V> map;
public UpperCaseHashMap() {
map = new HashMap<>();
}
UpperCaseHashMap(Map<K, V> map) {
this.map = map;
}
public V put(K key, V value) {
String temp = key.toString().toUpperCase();
key = (K) temp;
return super.put(key, value);
}
}
public class AddHashMap<K, V> extends HashMap<K, V> {
/**
*
*/
private static final long serialVersionUID = 1L;
Map<K, V> map;
AddHashMap(Map<K, V> map) {
this.map = map;
}
public V put(K key, V value) {
String temp = key.toString().concat("ADDED_BY_DECORATOR");
key = (K) temp;
return super.put(key, value);
}
}
实现 2 :- - 生成的地图是空的
公共类 AddHashMapImpl2
/**
*
*/
private static final long serialVersionUID = 1L;
Map<K, V> map;
AddHashMapImpl2(Map<K, V> map) {
this.map = map;
}
public V put(K key, V value) {
String temp = key.toString().concat("ADDED_BY_DECORATOR");
key = (K) temp;
return map.put(key, value);
}
}
public class UpperCaseHashMapImpl2<K, V> extends HashMapDecorator<K, V> {
/**
*
*/
private static final long serialVersionUID = 1L;
Map<K, V> map;
public UpperCaseHashMapImpl2() {
map = new HashMap<>();
}
UpperCaseHashMapImpl2(Map<K, V> map) {
this.map = map;
}
public V put(K key, V value) {
String temp = key.toString().toUpperCase();
key = (K) temp;
return map.put(key, value);
}
}
【问题讨论】:
标签: java design-patterns hashmap decorator