Java设计模式之策略模式
前言
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
实例
假设当前有2种用户级别,普通用户没有折扣,vip用户有8折优惠,我们来模拟个商品的交易过程。
具体代码
首先创建个用户抽象类
public abstract class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name) {
this.name = name;
}
public abstract double realPrice(double allPrice);
}
接着创建普通用户,没有优惠!
public class NormalUser extends User {
public NormalUser(String name) {
super(name);
}
@Override
public double realPrice(double allPrice) {
return allPrice;
}
}
创建vip用户,8折优惠
public class VipUser extends User {
public VipUser(String name) {
super(name);
}
@Override
public double realPrice(double allPrice) {
return allPrice * 0.8;
}
}
最后创建个用户管理类
public class Client {
private User user;
public Client(User user) {
this.user = user;
}
public void payPrice(double price) {
System.out.println(user.getName() + " real pay: " + user.realPrice(price));
}
}
测试:我们假设商品的价格是10000,当前用户是vip用户。
public class Main {
public static void main(String[] args) {
User user = new VipUser("vipuser1");
Client client = new Client(user);
client.payPrice(10000);
}
}
测试结果:
vipuser1 real pay: 8000.0
策略模式的优点
(1)提供了管理相关的算法族的办法,恰当使用继承可以把公共的代码移到父类里面;
(2)可以避免使用多重条件(if-else)语句。
策略模式的缺点
(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
Demo 地址