package com.bruce.pattern.strategy;
import com.bruce.pattern.strategy.behavior.FlyBehavior;
import com.bruce.pattern.strategy.behavior.QuackBehavior;
public abstract class Duck
{
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
}
package com.bruce.pattern.strategy;
public class MallardDuck extends Duck
{
@Override
public void display()
{
System.out.println("This is mallardDuck... ");
}
}
public interface FlyBehavior
{
void fly();
}
public class FlyWithWings implements FlyBehavior
{
@Override
public void fly()
{
System.out.println("Flying with wings!");
}
}
public class FlyNoWay implements FlyBehavior
{
@Override
public void fly()
{
System.out.println("Flying no way....");
}
}
package com.bruce.pattern.strategy;
import java.util.HashMap;
import java.util.Map;
import com.bruce.pattern.strategy.behavior.*;
public class Client {
/**
* @param args
*/
public static void main(String[] args)
{
Duck duck = new MallardDuck();
for(int i = 0;i<2;i++)
{
if(i == 0)
{
duck.setFlyBehavior(new FlyWithWings());
}
else
{
duck.setFlyBehavior(new FlyNoWay());
}
fly(duck);
}
Map<String, FlyBehavior> map = new HashMap<String, FlyBehavior>();
map.put("0", new FlyWithWings());
map.put("1", new FlyNoWay());
for(int i = 0;i<2;i++)
{
FlyBehavior flyBehavior = map.get(Integer.toString(i));
duck.setFlyBehavior(flyBehavior);
fly(duck);
}
}
public static void fly(Duck duck)
{
duck.performFly();
}
}
运行结果:
Flying with wings!
Flying no way....
Flying with wings!
Flying no way....
看到有帖子讨论这个,策略+表驱动法(Map),不错,哪天再结合工厂方法写个重构的例子,总结以后使用。
分享到:
相关推荐
代码中大量的 if else 如何优化 在编程中,我们常常会遇到大量的 if else 语句,这些语句会使得代码变得难以...我们可以使用提前 return、策略模式和枚举来优化大量的 if else 语句,使得代码更加简洁、灵活和可维护。
策略模式代码,两种方式实现,第一种,通过map存储方式,第二种,通过配置文件加反射方式
基于map的图像超分辨率的重构算法,用matlab来实现,非常实用
计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,...
室内指纹定位算法中的Radio map重构技术,李欣欣,邓中亮,针对室内定位中的指纹定位算法的精度和响应时间严重依赖于指纹地图(Radio-map),而Radio map的建立与更新慢,随着定位区域的增大其数据�
前端框架Dart的集合类型List Set Map详解 以及循环语句 forEach map where any every详解,包括PPT和源码
Java 实验策略模式观察者模式和组合模式 本实验主要旨在学习和掌握策略模式、观察者模式和组合模式,并学习如何使用这些模式解决实际问题。 策略模式 策略模式是一种行为型设计模式,它允许在运行时选择不同的...
Java 实验策略模式、观察者模式和组合模式 在本实验中,我们将学习和掌握策略模式、观察者模式和组合模式,并使用 Java 语言实现这些模式。这些模式是面向对象编程的重要组成部分,能够帮助我们设计和实现更加灵活...
Java项目的状态分发处理工具,能根据对象、json或者map里面的某个属性值分别执行不同的方法,通过方法解耦的方式,避免大量的if else判断,同时支持java se项目和spring项目 适用场景 大量if else的逻辑 消息通道...
同时, 为提高算法收敛性能, 对蛙跳策略进行改进:结合种群多样性指标增加逆转变异操作。仿真实验结果表明, 提出的改进蛙跳策略在Map-Reduce作业调度问题求解中, 收敛性能、作业总完成时间和平均完成时间三个方面均...
C语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言...
Android结合google map应用开发,路径查询设定,路径导航。
对Map的key和value进行排序 对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足...
route-map语句可以对符合条件的数据包实施路由策略,例如permit和deny。route-map语句的执行顺序可以通过sequence来控制。 匹配规则: 匹配规则是策略路由的核心,用于定义哪些数据包符合策略路由的条件。匹配规则...
Map a = new HashMap(); //方法一 Iterator it = a.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); System.out.println(pairs.getValue()); } //以下方法需要jdk5以上...
flex Google Map API做的地图浏览,适合初学者学习Google Map结合Flex开发,必须导入Google的Map API
It's really easy to use and customize, just build it on your device and go outside to try!...If you build for mobile platform (iOS or Android) the map will use your location if available.
ElseIf Toolbar1.Buttons(2).Value = tbrPressed Then Dim r As Rectangle Set r = Map1.Extent r.ScaleRectangle 2 Map1.Extent = r ElseIf Toolbar1.Buttons(3).Value = tbrPressed Then Map1.Pan ElseIf Toolbar1...
map.toString()后转换成Map类型
unity AR游戏地图系统GO Map - 3D Map for AR Gaming 3.2 Requires Unity 2017.2.1 or higher. GO Map is a dynamic map SDK for making location based games with unity 3D. Highly customizable with the ...