在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
比如说常见的会员体系,普通会员,黄金会员,白金会员...
package com.example.strategy;
public interface Member {
void show();
}
package com.example.strategy;
/**
* 普通会员
*/
public class CommonMember implements Member{
@Override
public void show() {
System.out.println("我是普通会员");
}
}
package com.example.strategy;
/**
* 黄金会员
*/
public class GoldMember implements Member{
@Override
public void show() {
System.out.println("我是黄金会员");
}
}
package com.example.strategy;
/**
* 白金会员
*/
public class PlatinaMember implements Member{
@Override
public void show() {
System.out.println("我是白金会员");
}
}
package com.example.strategy;
public class Context {
private Member member;
public Context(Member member) {
this.member = member;
}
public void doAction(){
this.member.show();
}
// 动态替换算法(策略)
public void replaceStrategy(Member member) {
this.member = member;
}
}
package com.example.strategy;
public class Test {
public static void main(String[] args) {
Member commonMember = new CommonMember();
Member goldMember = new GoldMember();
Member platinaMember = new PlatinaMember();
//普通会员
Context context = new Context(commonMember);
context.doAction();
//切换策略类为黄金会员
context.replaceStrategy(goldMember);
context.doAction();
//切换策略类为白金会员
context.replaceStrategy(platinaMember);
context.doAction();
}
}
1、优点
2、缺点