Java Tutorial/Design Pattern/Strategy Pattern

Материал из Java эксперт
Перейти к: навигация, поиск

Action with the Strategy Pattern

   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   Jet jet = new Jet();
   jet.setGoAlgorithm(new DriveEngine());
   jet.go();
   jet.setGoAlgorithm(new FlyFastEngine());
   jet.go();
   jet.setGoAlgorithm(new DriveEngine());
   jet.go();
 }

} abstract class Vehicle {

 Engine goa = null;
 public Vehicle() {
 }
 void setGoAlgorithm(Engine goa) {
   this.goa = goa;
 }
 public void go() {
   this.goa.go();
 }

} class Jet extends Vehicle {

 public Jet() {
 }

} interface Engine {

 public void go();

} class FlyingFastEngine implements Engine {

 public void go() {
   System.out.println("Now I"m flying fast.");
 }

}

class DriveEngine implements Engine {

 public void go() {
   System.out.println("Now I"m driving.");
 }

}

class FlyFastEngine implements Engine {

 public void go() {
   System.out.println("Now I"m flying fast.");
 }

}</source>





Strategy: choosing the algorithm at run-time

   <source lang="java">

interface Find {

 double[] algorithm(double[] line);

} class FindMethodA implements Find {

 public double[] algorithm(double[] line) {
   return new double[] { 1 };
 }

} class FindMethodB implements Find {

 public double[] algorithm(double[] line) {
   return new double[] { 2 };
 }

} class FindMethodC implements Find {

 public double[] algorithm(double[] line) {
   return new double[] { 3 };
 }

} class FindMethodD implements Find {

 public double[] algorithm(double[] line) {
   return new double[] { 4 };
 }

} class MySolver {

 private Find strategy;
 public MySolver(Find strat) {
   strategy = strat;
 }
 double[] get(double[] line) {
   return strategy.algorithm(line);
 }
 void changeAlgorithm(Find newAlgorithm) {
   strategy = newAlgorithm;
 }

} public class StrategyPattern {

 public static void main(String args[]) {
   MySolver solver = new MySolver(new FindMethodA());
   double[] line = { 1.0, 2.0, 1.0, 2.0, -1.0, 3.0, 4.0, 5.0, 4.0 };
   solver.get(line);
   solver.changeAlgorithm(new FindMethodC());
   solver.get(line);
 }

}</source>