zoukankan      html  css  js  c++  java
  • 【设计模式】—— 策略模式Strategy

      前言:【模式总览】——————————by xingoo

      模式意图

      定义一系列的算法,把他们封装起来,使得算法独立于适用对象。

      比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有。因此把每一个排序当做一个策略对象,客户调用哪个对象,就使用对应的策略方法。

      应用场景

      1 当许多的类,仅仅是行为或者策略不同时,可以把行为或策略单独提取出来,这样主体的类就可以进行统一了。

      2 需要使用不同的算法。

      3 一个类定义了多种行为。

      模式结构

      Context 环境角色的,策略的调用者

    class Context{
        private Strategy strategy;
        public Strategy getStrategy() {
            return strategy;
        }
        public void setStrategy(Strategy strategy) {
            this.strategy = strategy;
        }
        public void operation(){
            strategy.action();
        }
    }

      Strategy 策略的抽象,规定了统一的调用接口

    interface Strategy{
        public void action();
    }

      ConcreteStrategy 具体的策略

    class ConcreteStrategy1 implements Strategy{
        public void action(){
            System.out.println("strategy1 oepration");
        }
    }
    class ConcreteStrategy2 implements Strategy{
        public void action(){
            System.out.println("strategy2 oepration");
        }
    }

      全部代码

    package com.xingoo.test.design.strategy;
    class Context{
        private Strategy strategy;
        public Strategy getStrategy() {
            return strategy;
        }
        public void setStrategy(Strategy strategy) {
            this.strategy = strategy;
        }
        public void operation(){
            strategy.action();
        }
    }
    interface Strategy{
        public void action();
    }
    class ConcreteStrategy1 implements Strategy{
        public void action(){
            System.out.println("strategy1 oepration");
        }
    }
    class ConcreteStrategy2 implements Strategy{
        public void action(){
            System.out.println("strategy2 oepration");
        }
    }
    public class Client {
        public static void main(String[] args) {
            Context ctx = new Context();
            ctx.setStrategy(new ConcreteStrategy1());
            ctx.operation();
            ctx.setStrategy(new ConcreteStrategy2());
            ctx.operation();
        }
    }

      运行结果

    strategy1 oepration
    strategy2 oepration
  • 相关阅读:
    Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression
    Codeforces Round #481 (Div. 3) G. Petya's Exams
    使用create-react-app 搭建react + ts + antd框架
    callback、promise和async、await的使用方法
    JS数组中Array.of()方法的使用
    react中替换关键字并且高亮显示的方法
    封装 jsonp请求数据的方法
    React的新特性 ---- Hooks ---- 的基本使用
    在canvas中使用其他HTML元素
    React的性能优化
  • 原文地址:https://www.cnblogs.com/xing901022/p/4084900.html
Copyright © 2011-2022 走看看