Skip to content

Commit 2f292d4

Browse files
optimize: 服务工厂类,code大小写不敏感。
1 parent 3eec5e2 commit 2f292d4

File tree

5 files changed

+62
-28
lines changed

5 files changed

+62
-28
lines changed

core-parent/core/src/main/java/icu/easyj/core/factory/ServiceFactory.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public class ServiceFactory<S> {
3737

3838
private final Class<S> serviceClass;
3939
private final HashMap<String, ServiceGroup<S>> serviceMap = new HashMap<>();
40-
private final List<ServiceGroup<S>> serviceList = new ArrayList<>();
4140

4241

4342
public ServiceFactory(Class<S> serviceClass) {
@@ -47,9 +46,10 @@ public ServiceFactory(Class<S> serviceClass) {
4746
public ServiceFactory(Class<S> serviceClass, List<S> serviceList) {
4847
this(serviceClass);
4948

50-
this.addAll(serviceList);
49+
this.addServiceList(serviceList);
5150
}
5251

52+
5353
/**
5454
* 获取服务类
5555
*
@@ -94,7 +94,7 @@ public List<S> getDefaultList() {
9494

9595
@Nullable
9696
public S get(String code) {
97-
ServiceGroup<S> serviceGroup = serviceMap.get(code);
97+
ServiceGroup<S> serviceGroup = serviceMap.get(code.toLowerCase());
9898
if (serviceGroup == null) {
9999
return null;
100100
}
@@ -112,7 +112,7 @@ public S get(String code, boolean getDefaultIfNull) {
112112

113113
@Nonnull
114114
public List<S> getList(String code) {
115-
ServiceGroup<S> serviceGroup = serviceMap.get(code);
115+
ServiceGroup<S> serviceGroup = serviceMap.get(code.toLowerCase());
116116
if (serviceGroup == null) {
117117
return new ArrayList<>();
118118
}
@@ -121,7 +121,7 @@ public List<S> getList(String code) {
121121

122122
@Nullable
123123
public ServiceGroup<S> getGroup(String code) {
124-
return serviceMap.get(code);
124+
return serviceMap.get(code.toLowerCase());
125125
}
126126

127127
@Nullable
@@ -136,16 +136,20 @@ public ServiceGroup<S> getGroup(String code, boolean getDefaultIfNull) {
136136

137137
// add ---------------------------------------------------------------
138138

139-
public void add(S service) {
139+
public void addService(S service) {
140140
ServiceInfo<S> serviceInfo = ServiceInfo.of(service);
141+
this.addServiceInfo(serviceInfo);
142+
}
143+
144+
public void addServiceInfo(ServiceInfo<S> serviceInfo) {
141145
this.serviceMap.computeIfAbsent(serviceInfo.getCode(), ServiceGroup::new).add(serviceInfo);
142146

143147
if (serviceInfo.isDefault() && !DEFAULT_SERVICE_CODE.equals(serviceInfo.getCode())) {
144148
this.serviceMap.computeIfAbsent(DEFAULT_SERVICE_CODE, ServiceGroup::new).add(serviceInfo);
145149
}
146150
}
147151

148-
public void addAll(List<S> serviceList) {
152+
public void addServiceList(List<S> serviceList) {
149153
if (serviceList == null || serviceList.isEmpty()) {
150154
return;
151155
}
@@ -166,4 +170,24 @@ public void addAll(List<S> serviceList) {
166170
});
167171
}
168172

173+
public void addServiceInfoList(List<ServiceInfo<S>> serviceInfoList) {
174+
if (serviceInfoList == null || serviceInfoList.isEmpty()) {
175+
return;
176+
}
177+
178+
HashMap<String, List<ServiceInfo<S>>> map = new HashMap<>();
179+
for (ServiceInfo<S> serviceInfo : serviceInfoList) {
180+
map.computeIfAbsent(serviceInfo.getCode(), k -> new ArrayList<>()).add(serviceInfo);
181+
182+
if (serviceInfo.isDefault() && !DEFAULT_SERVICE_CODE.equals(serviceInfo.getCode())) {
183+
map.computeIfAbsent(DEFAULT_SERVICE_CODE, k -> new ArrayList<>()).add(serviceInfo);
184+
}
185+
}
186+
187+
map.forEach((code, serviceInfoList0) -> {
188+
ServiceGroup<S> group = this.serviceMap.computeIfAbsent(code, ServiceGroup::new);
189+
group.addAll(serviceInfoList0);
190+
});
191+
}
192+
169193
}

core-parent/core/src/main/java/icu/easyj/core/factory/ServiceGroup.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public ServiceGroup(String code) {
5252
throw new IllegalArgumentException("code 不能为空");
5353
}
5454

55-
this.code = code;
55+
this.code = code.toLowerCase();
5656
this.sortedServiceList = new ArrayList<>();
5757
}
5858

@@ -164,21 +164,22 @@ private void sort() {
164164
@Override
165165
public String toString() {
166166
if (this.sortedServiceList.isEmpty()) {
167-
return this.code + "[]";
167+
return "{ \"code\": \"" + this.code + "\"}";
168168
}
169169

170170
StringBuilder sb = new StringBuilder();
171171

172-
sb.append(this.code).append('[');
172+
sb.append("{ \"code\": \"").append(this.code).append("\", \"list\": [ ");
173+
int length = sb.length();
173174

174175
for (ServiceInfo<S> serviceInfo : this.sortedServiceList) {
175-
if (sb.length() > 0) {
176-
sb.append(',');
176+
if (sb.length() > length) {
177+
sb.append(", ");
177178
}
178-
sb.append(serviceInfo);
179+
sb.append('"').append(isDefaultGroup() ? serviceInfo.toString() : serviceInfo.toStringNoCode()).append('"');
179180
}
180181

181-
sb.append(']');
182+
sb.append(" ]}");
182183

183184
return sb.toString();
184185
}

core-parent/core/src/main/java/icu/easyj/core/factory/ServiceInfo.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class ServiceInfo<S> {
3636
private final int order;
3737

3838
private ServiceInfo(String code, boolean isDefault, int order, S service) {
39-
this.code = code;
39+
this.code = code.toLowerCase(); // 转为小写
4040
this.isDefault = isDefault;
4141
this.order = order;
4242
this.service = service;
@@ -112,7 +112,10 @@ public int getOrder() {
112112

113113
@Override
114114
public String toString() {
115-
return (isDefault ? "[default] " : "")
116-
+ code + " -> " + service.getClass().getName();
115+
return (isDefault ? "(default) " : "") + (code + " -> " + service.getClass().getName());
116+
}
117+
118+
public String toStringNoCode() {
119+
return (isDefault ? "(default) " : "") + service.getClass().getName();
117120
}
118121
}

core-parent/core/src/main/java/icu/easyj/core/factory/ServiceMark.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@
3636

3737
/**
3838
* 服务代码(同 code 属性,设置一个即可,两个都设置时,优先读取 code 属性)
39+
* 注:大小写不敏感
3940
*
4041
* @return code 返回服务代码
4142
*/
4243
String value() default "";
4344

4445
/**
4546
* 服务代码(同 value 属性,设置一个即可,两个都设置时,优先读取 code 属性)
47+
* 注:大小写不敏感
4648
*
4749
* @return code 返回服务代码
4850
*/

core-parent/core/src/test/java/icu/easyj/core/factory/ServiceFactoryTest.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,32 @@ class ServiceFactoryTest {
1313
void test() {
1414
List<ITestService> serviceList = new ArrayList<>();
1515

16-
serviceList.add(new TestServiceImplA());
17-
serviceList.add(new TestServiceImplB1());
18-
serviceList.add(new TestServiceImplB2());
16+
ITestService a = new TestServiceImplA();
17+
ITestService b1 = new TestServiceImplB1();
18+
ITestService b2 = new TestServiceImplB2();
19+
20+
serviceList.add(a);
21+
serviceList.add(b2);
22+
serviceList.add(b1);
1923

2024
ServiceFactory<ITestService> serviceFactory = new ServiceFactory<>(ITestService.class, serviceList);
2125

2226
// getList
23-
List<ITestService> aList = serviceFactory.getList("A");
27+
List<ITestService> aList = serviceFactory.getList("a");
2428
assertEquals(1, aList.size());
25-
List<ITestService> bList = serviceFactory.getList("B");
29+
List<ITestService> bList = serviceFactory.getList("b");
2630
assertEquals(2, bList.size());
2731

2832
// default
29-
assertEquals(serviceList.get(0), serviceFactory.getDefault());
33+
assertEquals(a, serviceFactory.getDefault());
3034
// A
31-
assertEquals(serviceList.get(0), serviceFactory.get("A"));
32-
assertEquals(serviceList.get(0), aList.get(0));
35+
assertEquals(a, serviceFactory.get("a"));
36+
assertEquals(a, aList.get(0));
3337
// B1
34-
assertEquals(serviceList.get(1), serviceFactory.get("B"));
35-
assertEquals(serviceList.get(1), bList.get(0));
38+
assertEquals(b1, serviceFactory.get("b"));
39+
assertEquals(b1, bList.get(0));
3640
// B2
37-
assertEquals(serviceList.get(2), bList.get(1));
41+
assertEquals(b2, bList.get(1));
3842
}
3943

4044
}

0 commit comments

Comments
 (0)