设计模式-策略模式 实现

策略模式:

  定义了算法族,将算法分别封装起来,让他们相互之间可以相互替换,该模式使得算法独立于客户。

 

定义个一个animal父类

public abstract class Animal {

    public Color color;
    
    //公共行为
    public void live() {
        System.out.println("all Animal is live");
    }
    
    //独特行为
    public void animalForColor () {
        color.color();
    }
    
    public void setColor (Color colo) {
        color = colo;
    }
}
View Code

 

父类中包含子类该有的公共的行为,并且将子类独特的行为已接口的方式定义在父类中(公共行为:每种动物都是活的。独特行为:每种动物的颜色都不相同)。

 

独特行为的接口color

 

public interface Color {

    public void color();
}
View Code

 

然后编辑不同动物对应的颜色,且统一实现color接口

 

public class DogColor implements Color{

    @Override
    public void color() {
        System.out.println("dog's color is yellow");
        
    }

}


public class PigColor implements Color{

    @Override
    public void color() {
        System.out.println("pig's color is pink");
    }

}
View Code

 

定义一种动物dog来继承父类animal 使得得到公共的行为特性。

 

public class Dog extends Animal{

}
View Code

 

这个dog就有公共行为live,现在要让dog实现自己的独特行为 color。

调用animal中的setColor方法来声明具体的独特行为的实现是什么。

这样就能灵活的使用每个动物的独特点且不会影响公共部分的行为。

 

Animal a = new Dog();
a.setColor(new DogColor());
a.animalForColor();
View Code

 

该模式利用接口多态的特点,使得一个对象的公共部分和独特部分完全剥离互不影响,大大提升了代码的灵活度。

 

posted @ 2018-02-28 16:50  粗鲁师太  阅读(178)  评论(0编辑  收藏  举报