设计模式-策略模式

定义:定义了一系列的算法家族(策略),一个父类多个子类的形式(继承)。提供给第三方使用时,能够自由的互相替换。 然后定义一个Context类,该类对外提供这些策略的使用。即第三方与整个算法家族进行交互,只需要跟Context产生耦合。 相比简单工厂模式,第三方使用工厂提供的对象,既要知道工厂类,又要知道父类。

策略模式与简单工厂模式很相似,解决的问题也相同,只不过第三方系统与其交互时,策略模式耦合更少,只需要与Context交互。 但是策略模式内部实现比简单工厂模式复杂些,本例是在Context中采用了工厂模式。

UML

spoon

继承:

    abstract class Parent{
        public abstract String doSomething(String input);
    }

    class Son1 extends Parent{
        @Override
        public String doSomething(String input){
            System.out.println(input);
            return input + "son1";
        }
    }

    class Son2 extends Parent{
        @Override
        public String doSomething(String input){
            System.out.println(input);
             return input + "son2";
        }
    }

Context类

    class Context{

        private Parent instance = null;

        public Context(String type){            
            switch (type){
                case "son1":
                    instance = new Son1();
                    break;
                case "son2":
                    instance = new Son2();
                    break;
                default:
                    throw new RuntimeException();
            }            
        }

        public String getResult(String input){
            return instance.doSomething(input);
        }

    }

使用

    public class TestMain {
        public static void main(String[] args) throws Exception{
           Context context = new Context("son1");
           String result = context.getResult("test");
        }
    }