设计模式:策略模式

策略模式,相信大家都不很陌生,但是对于初学者,可能不是很明白。

现在由我给大家讲讲策略模式。

根据我的理解,大家可以把策略模式的使用想象成一个人要写作业,写作业可以用不同的笔,这里不同的笔就是不同的策略了。

 

下面给出示例,逐一解释。

Tools.java这个类就是抽象的策略角色,也就是笔这个抽象角色

 

[java] view plaincopy

  1. public interface Tools {
  2.     public void write();
  3. }

Pen.java这个是一个具体的策略,钢笔

 

 

[java] view plaincopy

  1. public class Pen implements Tools {
  2.     @Override
  3.     public void write() {
  4.         System.out.println(“我用钢笔写作业”);
  5.     }
  6. }

Pencil.java 这个是一个具体的策略,铅笔

 

 

[java] view plaincopy

  1. public class Pencil implements Tools {
  2.     @Override
  3.     public void write() {
  4.         System.out.println(“我用铅笔写作业”);
  5.     }
  6. }

BallPointPen.java 这个是一个具体的策略,圆珠笔

 

 

[java] view plaincopy

  1. public class BallPointPen implements Tools {
  2.     @Override
  3.     public void write() {
  4.         System.out.println(“我用圆珠笔写作业”);
  5.     }
  6. }

 

策略的抽象角色和策略的一些具体实现我们都定义好了

 

下面我们还缺少使用这些策略的角色,也就是策略模式当中的 环境角色。

环境角色应该持有一个抽象策略接口的引用。

示例:Person.java

 

[java] view plaincopy

  1. public class Person {
  2.     private Tools tools;
  3.     public Tools getTools() {
  4.         return tools;
  5.     }
  6.     public void setTools(Tools tools) {
  7.         this.tools = tools;
  8.     }
  9.     public Person(Tools tools)
  10.     {
  11.         this.tools = tools;
  12.     }
  13.     public void write()
  14.     {
  15.         this.tools.write();
  16.     }
  17. }

策略模式的使用:

 

UseCase.java

 

[java] view plaincopy

  1. public class UseCase {
  2.     public static void main(String[] args) {
  3.         Person person = new Person(new Pen());
  4.         person.write();
  5.         person.setTools(new Pencil());
  6.         person.write();
  7.     }
  8. }

标签