1,什么是策略模式?
创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。
2,策略模式主要用途是什么?
能够动态改变对象的行为,根据所传参数不同,有不同的行为表现
3,设计原理
将变化部分设计成一个对象里面的方法,在继承的子类中覆盖该方法,利用java的多态性,指向不同子类对象的父类引用作为参数传递进去的时候(这就是策略),就会调用到不同的子类中重写的方法,从而实现同一套代码,不同的行为表现
废话不多说,直接看例子和代码:
class Processor
{
public String name()
{
return getClass().getSimpleName();
}
String process(Object input)
{
return (String)input;
}
}
class Upcase extends Processor
{
String process(Object input)
{
return ((String)input).toUpperCase();
}
}
class DownCase extends Processor
{
String process(Object input)
{
return ((String)input).toLowerCase();
}
}
public class Strategy
{
public static void process(Processor p,Object s)
{
System.out.println("Using processor " + p.name());
System.out.println(p.process(s));
}
public static String s = "Test the Strategy design mode.";
public static void main(String[] args)
{
process(new Upcase(), s);
process(new DownCase(), s);
}
}
上面代码段中,Processor对象就是一个策略,它包含要执行的代码段,作为参数传进去了,在main()中可以看到有两种不同类型的策略应用到了String类型的对象s上
OK,策略模式介绍完了,说说它的应用场景吧,策略模式使得算法可以在不影响 到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用,跟工厂模式的差别,工厂模式注重的是对象的构造,可以根据所传参数的不同,构造出不同的对象的实例,是创建型模式;而策略模式是根据所穿参数不同,具有不同的行为表现,是行为型模式。