zoukankan      html  css  js  c++  java
  • 设计模式-策略模式 实现

    策略模式:

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

    定义个一个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

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

  • 相关阅读:
    BZOJ4036 HAOI2015按位或(概率期望+容斥原理)
    洛谷p2661信息传递题解
    洛谷P1434滑雪题解及记忆化搜索的基本步骤
    二分图最大匹配
    线段树

    图论基本算法
    并查集
    RMQ--ST表
    矩阵快速幂和矩阵乘法
  • 原文地址:https://www.cnblogs.com/culushitai/p/8484510.html
Copyright © 2011-2022 走看看