zoukankan      html  css  js  c++  java
  • java设计模式(六)策略模式

      适用于同一操作的不同行为,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们可以相互替换,让算法独立于使用它的客户而独立变化,具体应用场景如第三方支付对接不同银行的算法。

      要点:1)抽象策略角色

            2)具体策略角色:包装相关算法和行为

         3)环境角色:持有一个策略类的引用,最终给客户端调用

    1、抽象策略接口

    public interface SwimmingStratege {
        public void swimming();
    }

    2、具体策略角色SwimmingWithFoot 

    public class SwimmingWithFoot implements SwimmingStratege {
        public void swimming() {
            System.out.println("我借助脚滑动在水中游走");
        }
    }

    3、具体策略角色SwimmingWithWind 

    public class SwimmingWithWind implements SwimmingStratege {
        public void swimming() {
            System.out.println("我借助风在水中游走");
        }
    }

    4、环境角色Duck 抽象类

    public abstract class Duck {
    
        public void quack() {
            System.out.println("嘎嘎嘎");
        }
    
        public abstract void display();
    
        private SwimmingStratege swimmingStratege;
    
        public void setSwimmingStratege(SwimmingStratege swimmingStratege) {
            this.swimmingStratege = swimmingStratege;
        }
    
        public void swimming() {
            swimmingStratege.swimming();
        }
    }

    5、环境角色RealDuck

    public class RealDuck extends Duck {
    
        public RealDuck() {
            super();
            super.setSwimmingStratege(new SwimmingWithFoot());
        }
    
        @Override
        public void quack() {
            super.quack();
        }
    
        public void display() {
            System.out.println("我是真的鸭子");
        }
    }

    6、环境角色

    public class YellowDuck extends Duck {
    
        public YellowDuck() {
            super();
            super.setSwimmingStratege(new SwimmingWithWind());
        }
    
        @Override
        public void quack() {
            super.quack();
        }
    
        public void display() {
            System.out.println("我是大黄鸭");
        }
    
    }

    7、测试

    public class Model {
    
        public static void main(String[] args) {
            Duck duck = new RealDuck();
    //        Duck duck = new YellowDuck();
            duck.display();
            duck.quack();
            duck.swimming();
        }
    
    }
  • 相关阅读:
    webpack 关于跨域的配置
    如何使用css变量
    样式重置
    vue+element_ui上传文件,并传递额外参数(自动上传)
    LeetCode-46-全排列
    LeetCode-39-组合总数
    LeetCode-33-搜索旋转排序数组
    LeetCode-207-课程表
    LeetCode-15-三数之和
    LeetCode-盛最多水的容器
  • 原文地址:https://www.cnblogs.com/sunjf/p/stratege.html
Copyright © 2011-2022 走看看