Skip to content

Commit eaca947

Browse files
策略模式,代码重构
1 parent 448077c commit eaca947

15 files changed

+216
-6
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
<artifactId>lombok</artifactId>
1919
<version>1.18.8</version>
2020
</dependency>
21+
<dependency>
22+
<groupId>junit</groupId>
23+
<artifactId>junit</artifactId>
24+
<version>4.12</version>
25+
<scope>test</scope>
26+
</dependency>
2127
</dependencies>
2228

2329
<build>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:27
6+
* @Description:
7+
*
8+
* 参考资料:https://www.cnblogs.com/ldsweely/p/12058346.html
9+
*/
10+
public class Client {
11+
12+
public static double getResult(long money, String type) {
13+
MemberStrategy strategy = StrategyFactory.getInstance().getMemberStrategy(type);
14+
15+
if (strategy == null){
16+
throw new IllegalArgumentException("please input right type");
17+
}
18+
19+
return strategy.compute(money);
20+
}
21+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:06
6+
* @Description:
7+
*/
8+
public class GoldStrategy implements MemberStrategy{
9+
10+
@Override
11+
public double compute(long money) {
12+
System.out.println("黄金会员 8折");
13+
return money * 0.8;
14+
}
15+
16+
@Override
17+
public String getType() {
18+
return UserTypeEnum.GOLD_VIP.getType();
19+
}
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:01
6+
* @Description:
7+
*/
8+
public interface MemberStrategy {
9+
// 计费方法
10+
double compute(long money);
11+
12+
String getType();
13+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:02
6+
* @Description:
7+
*/
8+
public class OrdinaryStrategy implements MemberStrategy {
9+
10+
@Override
11+
public double compute(long money) {
12+
System.out.println("普通会员 不打折");
13+
return money;
14+
}
15+
16+
@Override
17+
public String getType() {
18+
return UserTypeEnum.ORDINARY.getType();
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:07
6+
* @Description:
7+
*/
8+
public class PlatinumStrategy implements MemberStrategy {
9+
10+
@Override
11+
public double compute(long money) {
12+
System.out.println("白金会员 优惠50元,再打7折");
13+
return (money - 50) * 0.7;
14+
}
15+
16+
@Override
17+
public String getType() {
18+
return UserTypeEnum.PLATINUM_VIP.getType();
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:04
6+
* @Description:
7+
*/
8+
public class SilverStrategy implements MemberStrategy {
9+
10+
@Override
11+
public double compute(long money) {
12+
System.out.println("白银会员 优惠50元");
13+
return money - 50;
14+
}
15+
16+
@Override
17+
public String getType() {
18+
return UserTypeEnum.SILVER_VIP.getType();
19+
}
20+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package strategy.demo;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.stream.Collectors;
7+
8+
/**
9+
* @Author: EnjoyCoding
10+
* @Date: 2020\1\16 0016 23:23
11+
* @Description:
12+
*/
13+
public class StrategyFactory {
14+
15+
private Map<String, MemberStrategy> map;
16+
17+
public StrategyFactory() {
18+
19+
List<MemberStrategy> strategies = new ArrayList<>();
20+
21+
strategies.add(new OrdinaryStrategy());
22+
strategies.add(new SilverStrategy());
23+
strategies.add(new GoldStrategy());
24+
strategies.add(new PlatinumStrategy());
25+
strategies.add(new PlatinumStrategy());
26+
27+
// 重点
28+
map = strategies.stream().collect(Collectors.toMap(MemberStrategy::getType, strategy -> strategy));
29+
30+
/* 等同上面
31+
map = new HashMap<>();
32+
for (Strategy strategy : strategies) {
33+
map.put(strategy.getType(), strategy);
34+
}*/
35+
}
36+
37+
private static class Holder {
38+
private static StrategyFactory instance = new StrategyFactory();
39+
}
40+
41+
public static StrategyFactory getInstance() {
42+
return Holder.instance;
43+
}
44+
45+
public MemberStrategy getMemberStrategy(String type) {
46+
return map.get(type);
47+
}
48+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package strategy.demo;
2+
3+
/**
4+
* @Author: EnjoyCoding
5+
* @Date: 2020\1\16 0016 23:08
6+
* @Description:
7+
*/
8+
public enum UserTypeEnum {
9+
10+
ORDINARY("1","code1"),
11+
SILVER_VIP("2","code2"),
12+
GOLD_VIP("3","code3"),
13+
PLATINUM_VIP("4","code4"),
14+
15+
;
16+
17+
18+
UserTypeEnum(String type, String code) {
19+
this.type = type;
20+
this.code = code;
21+
}
22+
23+
private String type;
24+
private String code;
25+
26+
27+
public String getType() {
28+
return type;
29+
}
30+
31+
public void setType(String type) {
32+
this.type = type;
33+
}
34+
35+
public String getCode() {
36+
return code;
37+
}
38+
39+
public void setCode(String code) {
40+
this.code = code;
41+
}
42+
}

src/main/java/strategy/AdvancedMemberStrategy.java renamed to src/main/java/strategy/demo2/AdvancedMemberStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
public class AdvancedMemberStrategy implements MemberStrategy {
44
@Override

src/main/java/strategy/Client.java renamed to src/main/java/strategy/demo2/Client.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
/**
44
* 策略模式。针对不同等级的客户,采用不同的算法

src/main/java/strategy/IntermediateMemberStrategy.java renamed to src/main/java/strategy/demo2/IntermediateMemberStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
public class IntermediateMemberStrategy implements MemberStrategy {
44
@Override

src/main/java/strategy/MemberStrategy.java renamed to src/main/java/strategy/demo2/MemberStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
/**
44
* 抽象折扣类

src/main/java/strategy/Price.java renamed to src/main/java/strategy/demo2/Price.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
public class Price {
44
private MemberStrategy strategy;

src/main/java/strategy/PrimaryMemberStrategy.java renamed to src/main/java/strategy/demo2/PrimaryMemberStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package strategy;
1+
package strategy.demo2;
22

33
public class PrimaryMemberStrategy implements MemberStrategy {
44
@Override

0 commit comments

Comments
 (0)