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

    策略模式:

    定义了算法族,分别封装起来,让它们之间可以相互替换,此模式的变化独立于算法的使用者。

    /**
     * 策略模式
     */
    public class Stragety {
        public static void main(String[] args) {
            Zombie normalZombie = new NormalZombie();
            normalZombie.display();
            normalZombie.move();
            normalZombie.attack();
    
            normalZombie.setAttackable(new HitAttack());
            normalZombie.attack();
            //------------------------------------------------
            Zombie flagZombie = new FlagZombie(new RunMove(), new HitAttack());
            flagZombie.display();
            flagZombie.move();
            flagZombie.attack();
        }
    }
    
    interface Moveable{
        void move();
    }
    
    interface  Attackable{
        void attack();
    }
    
    class StepByStepMove implements Moveable{
        @Override
        public void move() {
            System.out.println("一步一步的移动");
        }
    }
    
    class  BiteAttack implements Attackable{
        @Override
        public void attack() {
            System.out.println("咬。。。");
        }
    }
    
    class RunMove implements Moveable{
        @Override
        public void move() {
            System.out.println("快速移动");
        }
    }
    
    class  HitAttack implements Attackable{
        @Override
        public void attack() {
            System.out.println("打。。。");
        }
    }
    
    
    
    abstract class Zombie{
        Moveable moveable;
        Attackable attackable;
    
        public Zombie(Moveable moveable, Attackable attackable) {
            this.moveable = moveable;
            this.attackable = attackable;
        }
    
        abstract public void display();
        abstract public void move();
        abstract public void attack();
    
        public Moveable getMoveable() {
            return moveable;
        }
    
        public void setMoveable(Moveable moveable) {
            this.moveable = moveable;
        }
    
        public Attackable getAttackable() {
            return attackable;
        }
    
        public void setAttackable(Attackable attackable) {
            this.attackable = attackable;
        }
    }
    
    class NormalZombie extends Zombie{
        //设置默认的移动和攻击方式
        public NormalZombie() {
            super(new StepByStepMove(),new BiteAttack());
        }
    
        public NormalZombie(Moveable moveable, Attackable attackable) {
            super(moveable, attackable);
        }
    
        @Override
        public void display() {
            System.out.println("我是普通僵尸。。。");
        }
    
        @Override
        public void move() {
            moveable.move();
        }
    
        @Override
        public void attack() {
            attackable.attack();
        }
    }
    
    class FlagZombie extends Zombie{
        public FlagZombie() {
            super(new StepByStepMove(),new BiteAttack());
        }
    
        public FlagZombie(Moveable moveable, Attackable attackable) {
            super(moveable, attackable);
        }
    
        @Override
        public void display() {
            System.out.println("我是骑手僵尸。。。");
        }
    
        @Override
        public void move() {
            moveable.move();
        }
    
        @Override
        public void attack() {
            attackable.attack();
        }
    }
  • 相关阅读:
    Python --链接MYSQL数据库与简单操作 含SSH链接
    Jmeter 后置处理器--jp@gc
    Jmeter 接口测试 响应结果中文是Unicode转为中文
    Jmeter JDBC请求---把数据库结果参数化传递到其他请求
    MySQL根据某字段部分内容分组计数
    Linux 服务器命令,持续更新……
    APP网络测试要点和弱网模拟
    Jmeter JDBC Request 查询语句中有汉字查询结果为空的解决方法
    Jmeter连接Redis,获取Redis数据集
    Jmeter获取接口返回数组的长度
  • 原文地址:https://www.cnblogs.com/chenfx/p/14791829.html
Copyright © 2011-2022 走看看