策略模式(一)

最近重看java编程思想,感觉收获颇多。

看到在继承处提到的策略模式不禁想到之前的一个乒乓球机器人的项目中的一个环节,感觉策略模式能很好的解决,所以在这里写一个小demo

情景:

  由机器人视觉采集到一些点后,对乒乓求得轨迹进行预测,并在这条轨迹中取一个最佳击球点

  之前我是直接在一个类中通过对不同方案的比较返回一个值,但是写到最后有7,8中方案的时候就会很混乱,此时可以考虑策略模式

策略模式本质

  通过什么策略(strategy)对什么样的数据(input)进行处理最终得到什么结果(返回值)

  函数原型:public Object process(Strategy A, Object input);

类图:

 

关键:

  继承(接口)

  向上转型upcasting

 

代码:

结构:

//FindHitPoint.java

1
package com.paci.base; 2 3 public class FindHitPoint { 4 5 public Object getHitPoint(Object[] points) { 6 // TODO Auto-generated method stub 7 return null; 8 } 9 }
 
  
 //App.java
 1 package com.paci.main;
 2 
 3 import com.paci.base.FindHitPoint;
 4 import com.paic.domain.Point3D;
 5 import com.paic.process.StrategyOne;
 6 import com.paic.process.StrategyTwo;
 7 
 8 public class App {
 9     public static void main(String[] args) {
10         Point3D[] trace = new Point3D[2];
11         trace[0] = new Point3D(0, 0, 0);
12         trace[1] = new Point3D(1, 1, 1);
13         Point3D result = (Point3D) getResult(new StrategyOne(), trace);
14         System.out.println(result.getX() + "@" + result.getY() + "@" + result.getZ());
15     }
16     
17     private static Object getResult(FindHitPoint fhp, Object[] input) {
18         Object obj = null;
19         obj = fhp.getHitPoint(input);
20         return obj;
21     }
22 }
 //Point3D.java

1
package com.paic.domain; 2 3 public class Point3D { 4 private float x; 5 private float y; 6 private float z; 7 8 public Point3D(float x, float y, float z){ 9 this.x = x; 10 this.y = y; 11 this.z = z; 12 } 13 14 public float getX() { 15 return x; 16 } 17 public void setX(float x) { 18 this.x = x; 19 } 20 public float getY() { 21 return y; 22 } 23 public void setY(float y) { 24 this.y = y; 25 } 26 public float getZ() { 27 return z; 28 } 29 public void setZ(float z) { 30 this.z = z; 31 } 32 33 }
 
//StrategyOne.java

1
package com.paic.process; 2 3 import com.paci.base.FindHitPoint; 4 import com.paic.domain.Point3D; 5 6 public class StrategyOne extends FindHitPoint { 7 8 @Override 9 public Object getHitPoint(Object[] points) { 10 11 Point3D hitPoint = null; 12 if(points != null) { 13 hitPoint = (Point3D)points[0]; 14 } 15 return hitPoint; 16 } 17 18 }
 
  
//StrategyTwo.java


1
package com.paic.process; 2 3 import com.paci.base.FindHitPoint; 4 import com.paic.domain.Point3D; 5 6 public class StrategyTwo extends FindHitPoint { 7 8 @Override 9 public Object getHitPoint(Object[] points) { 10 11 Point3D hitPoint = null; 12 if(points != null) { 13 hitPoint = (Point3D)points[1]; 14 } 15 return hitPoint; 16 } 17 }

 

转载于:https://www.cnblogs.com/qily/p/7612184.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值