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

    已经很久没有写博客了,今天写一篇关于策略模式的。通过交换两个数,来示例策略模式的使用。

    package nuc.wss.operation;
    
    /**
     * 交换两个数的接口
     *
     */
    public interface Change {
        public void change(long a, long b);
    }
    View Code
    package nuc.wss.operation.impl;
    
    import nuc.wss.operation.Change;
    /**
     * 通过加减交换两个数
     *
     */
    public class AddOrSub implements Change {
    
        @Override
        public void change(long a, long b) {
            a = a + b;
            b = a - b;
            a = a - b;
            System.out.println("AddOrSub: a = " + a + " b = " + b);
        }
    }
    View Code
    package nuc.wss.operation.impl;
    
    import nuc.wss.operation.Change;
    
    /**
     * 通过位运算交换两个数
     *
     */
    public class BitChange implements Change {
    
        @Override
        public void change(long a, long b) {
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;
            System.out.println("BitChange: a = " + a + " b = " + b);
        }
    }
    View Code
    package nuc.wss.operation.impl;
    
    import nuc.wss.operation.Change;
    
    /**
     * 通过运算交换两个数
     *
     */
    public class OperationChange implements Change {
    
        @Override
        public void change(long a, long b) {
            a = b + (b = a) * 0;
            System.out.println("OperationChange: a = " + a + " b = " + b);
        }
    }
    View Code
    package nuc.wss.operation.impl;
    
    import nuc.wss.operation.Change;
    
    /**
     * 通过中间变量交换两个数
     *
     */
    public class TempChange implements Change {
    
        @Override
        public void change(long a, long b) {
            long temp = a;
            a = b;
            b = temp;
            System.out.println("TempChange: a = " + a + " b = " + b);
        }
    
    }
    View Code
    import nuc.wss.operation.Change;
    
    /**
     * 通过此类操作Change子类
     *
     */
    public class Context {
        private Change operation;
        
        public Context() {
            
        }
        
        public Context(Change operation) {
            this.operation = operation;
        }
        
        public void setOperation(Change operation) {
            this.operation = operation;
        }
        
        public void operate(long a, long b) {
            operation.change(a, b);
        }
    }
    View Code
    import nuc.wss.operation.impl.AddOrSub;
    import nuc.wss.operation.impl.BitChange;
    import nuc.wss.operation.impl.OperationChange;
    import nuc.wss.operation.impl.TempChange;
    
    public class Main {
        public static void main(String[] args) {
            Context context = new Context();
            
            context.setOperation(new AddOrSub());
            context.operate(3, 4);
            
            context.setOperation(new BitChange());
            context.operate(3, 4);
            
            context.setOperation(new OperationChange());
            context.operate(3, 4);
            
            context.setOperation(new TempChange());
            context.operate(3, 4);
        }
    }
    View Code
  • 相关阅读:
    DES加密/解密类。
    断言与单元测试
    空对象模式和扩展方法的NULL验证
    防御性判断
    行为型-观察者模式、基于事件的观察者
    【Python学习日记】B站小甲鱼:继承,super和多重继承
    【Python学习日记】B站小甲鱼:类和对象
    【Python学习日记】B站小甲鱼:图形界面入门easygui
    【Python学习日记】B站小甲鱼:丰富的else语句
    【Python学习日记】B站小甲鱼:永久储存(pickle模块)和异常处理(exception)
  • 原文地址:https://www.cnblogs.com/wss-is-knight/p/3903467.html
Copyright © 2011-2022 走看看