今天 我们来学习一下策略模式,什么是策略模式呢?比如我们一个功能的实现可以有多个策略去选择,比如:出行方式可以选择:共享单车,拼车,私家车,出租等。如果将这个出行方式提供一个统一的接口,每个策略都有自己的实现类,客户端就可以通过实现具体的策略对象来完成功能,而这样的策略是可以动态替换的,扩展性和维护性及代码可读性较高,这就是就是策略模式。
策略模式遵循的是:对修改关闭,对拓展开发的原则。且针对接口编程,而不是针对实现编程
public interface IGoodsKinds {
//输入商品种类方法
String iGoodsKinds(String goodsKinds);
}
public interface IGoodsName {
//输入商品名称方法
String iGoodsName(String goodsName);
}
public class HomeAppliance implements IGoodsKinds {
@Override
public String iGoodsKinds() {
return "选择购买的商品种类是:家用电器";
}
}
public class FruitVegetable implements IGoodsKinds {
@Override
public String iGoodsKinds() {
return "选择购买的商品种类是:瓜果蔬菜";
}
}
public class AppleGoods implements IGoodsName {
@Override
public String iGoodsName() {
return "选择的商品名称是:苹果";
}
}
public class BananaGoods implements IGoodsName {
@Override
public String iGoodsName() {
return "选择的商品名称是:香蕉";
}
}
public class RefrigeratorGoods implements IGoodsName {
@Override
public String iGoodsName() {
return "选择的商品名称是:智能冰箱";
}
}
public class AirConditioner implements IGoodsName {
@Override
public String iGoodsName() {
return "选择的商品名称是:智能空调";
}
}
public abstract class BasePattern {
IGoodsKinds mIGoodsKinds;
IGoodsName mIGoodsName;
public void setGoodsKinds(IGoodsKinds iGoodsKinds){
this.mIGoodsKinds =iGoodsKinds;
}
public void setmIGoodsName(IGoodsName mIGoodsName){
this.mIGoodsName =mIGoodsName;
}
//打印用户选择的商品种类
public void printGoodsKinds(){
if(mIGoodsKinds != null){
System.out.println(mIGoodsKinds.iGoodsKinds());
}
}
//打印用户选择的商品名称
public void printGoodsName(){
if(mIGoodsName != null){
System.out.println(mIGoodsName.iGoodsName());
}
}
//公共方法,判断用户是否是会员
public abstract String isMembers(int membersCode);
}
最后购物的实现类:
public class MemberPattern extends BaseShopingPattern {
@Override
public String isMembers(int membersCode) {
if(membersCode == 0){
return "该用户为会员用户";
}else{
return "该用户为普通用户";
}
}
}
调用:
结果打印展示:
image.png
适用场景:策略设计模式适用于某个业务或行为有多个实现类,且在一次运行中当前业务只会执行一种实现类的情况。 完毕!