设计模式--策略模式

策略模式

百度百科定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

组成:
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
优点:
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();
    }
}

输出:

 

以上就是策略模式,多种不同解决方案动态切换,起到改变对象行为的效果。

 

posted @ 2017-10-27 15:01  Never-Say-Die  阅读(155)  评论(0编辑  收藏  举报