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

    定义
    策略模式,就是将一个算法的不同实现封装成一个个单独的类,这些类实现同一个接口,使用者直接使用该接口来访问具体的算法

    java 编程思想
    
    package chapter9interfaces.classprocessor;
    
    import java.util.Arrays;
    
    class Processor {
        public String name() {
            return getClass().getSimpleName();
        }
    
        Object process(Object input) {
            return input;
        }
    }
    
    class Upcase extends Processor {
        String process(Object input) { //返回协变类型
            return ((String) input).toUpperCase();
        }
    }
    
    class Downcase extends Processor {
        String process(Object input) {
            return ((String) input).toLowerCase();
        }
    }
    
    class Splitter extends Processor {
        String process(Object input) {
            return Arrays.toString(((String) input).split(" "));
        }
    }
    
    public class Apply {
        public static void process(Processor p, Object s) { //策略设计模式 根据所传递的参数对象的不同,而具有不同行为的方法
            System.out.println("Using Processor " + p.name()); // 方法中包含算法中固定不变的部分 ,策略就是传递进入的参数对象,包含变化的部分,包含要执行的代码
            System.out.println(p.process(s));
        }
    
        public static String s = "Disagreement with beliefs is by definition incorrect";
    
        public static void main(String[] args) {
            process(new Upcase(), s);
            process(new Downcase(), s);
            process(new Splitter(), s);
    
        }
    }
    
    

    https://blog.csdn.net/chenjie19891104/article/details/6396458

    package chapter9interfaces.strategy;

    // 公共方法回调用类
    interface SomeCallBack {
    public void doTheSame();
    }

    // 策略类
    interface Strategy {
    void execute(SomeCallBack scb);
    }

    // 策略实现类
    class ConcreteStrategy1 implements Strategy {

    @Override
    public void execute(SomeCallBack scb) {
        scb.doTheSame();
        System.out.println(getClass().getSimpleName());
    
    }
    

    }

    class ConcreteStrategy2 implements Strategy {

    @Override
    public void execute(SomeCallBack scb) {
        scb.doTheSame();
        System.out.println(getClass().getSimpleName());
    
    }
    

    }

    class ConcreteStrategy3 implements Strategy {

    @Override
    public void execute(SomeCallBack scb) {
        scb.doTheSame();
        System.out.println(getClass().getSimpleName());
    
    }
    

    }

    public class Context {

    public static void main(String[] args) {
        Strategy strategy = new ConcreteStrategy1();
    
        SomeCallBack scb = new SomeCallBack() {
    
            @Override
            public void doTheSame() {
                System.out.println("do the same");
            }
        };
        strategy.execute(scb);
    
        strategy = new ConcreteStrategy2();
        strategy.execute(scb);
    
    }
    

    }

    
    
  • 相关阅读:
    Jqgrid demo-史上最强大,没有之一
    围巾的味道慢慢消退,织围巾的人又在何处呢?
    挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
    个人感觉对程序员来说,熬夜是青春最大的杀手
    重装系统分区时,发现一个叫LVM的东西,找出来和大家分享
    如何参加开源项目
    和师兄们水平差的不是一丁半点
    华为RH2285安装过程及经验总结
    kilo本地库制作
    Cinder volume 的使用方法
  • 原文地址:https://www.cnblogs.com/erinchen/p/11819895.html
Copyright © 2011-2022 走看看