策略模式
百度百科定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
组成:
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
优点:
1、可以动态的改变对象的行为。
2、使用策略模式可以避免使用多重条件转移语句。
3、策略模式提供了可以替换继承关系的办法。
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2、策略模式造成很多的策略类,每个具体策略类都会产生一个新类。
具体应用:
简单一个例子:不同时期的人用不同的笔写字。
类图:
代码实现:
public class Person { public Pen pen; public void setPen(Pen pen) { this.pen = pen; } public void doJob(){ pen.write(); } }
public class Ancient extends Person { public Ancient() { pen = new Brush(); System.out.println("古代人"); } }
public class Modern extends Person{ public Modern() { pen = new Pencil(); System.out.println("现代人"); } }
public interface Pen { void write(); }
public class Pencil implements Pen { @Override public void write() { System.out.println("用铅笔写字"); } }
public class Brush implements Pen { @Override public void write() { System.out.println("用毛笔写字"); } }
public class Test { public static void main(String[] args) { Person person = new Ancient(); person.doJob(); person.setPen(new Pencil()); person.doJob(); } }
输出:
以上就是策略模式,多种不同解决方案动态切换,起到改变对象行为的效果。