策略模式:
定义了算法族,将算法分别封装起来,让他们相互之间可以相互替换,该模式使得算法独立于客户。
定义个一个animal父类
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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; } }
父类中包含子类该有的公共的行为,并且将子类独特的行为已接口的方式定义在父类中(公共行为:每种动物都是活的。独特行为:每种动物的颜色都不相同)。
独特行为的接口color
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public interface Color { public void color(); }
然后编辑不同动物对应的颜色,且统一实现color接口
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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"); } }
定义一种动物dog来继承父类animal 使得得到公共的行为特性。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class Dog extends Animal{ }
这个dog就有公共行为live,现在要让dog实现自己的独特行为 color。
调用animal中的setColor方法来声明具体的独特行为的实现是什么。
这样就能灵活的使用每个动物的独特点且不会影响公共部分的行为。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
Animal a = new Dog(); a.setColor(new DogColor()); a.animalForColor();
该模式利用接口多态的特点,使得一个对象的公共部分和独特部分完全剥离互不影响,大大提升了代码的灵活度。