策略模式
【摘要】
场景:当不同条件调用不同的算法或者策略时。
优点:1.可以减少大量的if else,减少耦合度。
2.方便扩展和维护
缺点:1.类的数量变多,机构变复杂了。
2.向外...
场景:当不同条件调用不同的算法或者策略时。
优点:1.可以减少大量的if else,减少耦合度。
2.方便扩展和维护
缺点:1.类的数量变多,机构变复杂了。
2.向外暴露了策略
类图:
代码:
策略接口
-
public interface Strategy {
-
public void method();
-
}
策略实现
-
public class StrategyA implements Strategy {
-
@Override
-
public void methodA() {
-
System.out.println("方法A");
-
}
-
}
-
public class StrategyB implements Strategy {
-
@Override
-
public void methodB() {
-
System.out.println("方法B");
-
}
-
}
-
public class StrategyC implements Strategy {
-
@Override
-
public void methodC() {
-
System.out.println("方法C");
-
}
-
}
上下文角色
-
public class Context {
-
//抽象策略
-
private Strategy strategy = null;
-
//构造函数设置具体策略
-
public Context(Strategy strategy) {
-
this.strategy = strategy;
-
}
-
public void setContext(Strategy strategy) {
-
this.strategy = strategy;
-
}
-
//封装后的策略方法
-
public void doMethod() {
-
this.strategy.method();
-
}
-
}
调用(如果为了美化 可以将这个类设计为工厂 这样可以保持对入口的统一管理)
-
public class Client {
-
public static void main(String[] args) {
-
//声明上下文对象
-
Context context = new Context();
-
context.setContext(new StrategyA());
-
//执行封装后的方法
-
context.method();
-
context.setContext(new StrategyB());
-
//执行封装后的方法
-
context.method();
-
}
-
}
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/102568385
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)