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);
    
    }
    

    }

    
    
  • 相关阅读:
    坚持的力量 第十五篇
    <QT障碍之路>qt中使用串口类接收数据不完整
    《开发板 — ping得通本地,但是不能上网。route设置默认网关》
    《海思3531D 搭建环境出现的一些问题》
    《应用编程 — 进程通信 — 命名管道FIFO》
    <QT学习>QT中串口QSerialport类学习与使用
    网络视频工具/网站
    [恢]hdu 1701
    [恢]hdu 1425
    [恢]hdu 2523
  • 原文地址:https://www.cnblogs.com/erinchen/p/11819895.html
Copyright © 2011-2022 走看看