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

    1:策略模式

          策略模式就是定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换,Strategy模式使算法可独立于

         使用它的客户而变化。

    2:策略模式的优缺点:

          策略模式的优点:
             提供管理相关算法族的办法
             提供可替代继承关系的办法
             避免了使用多重条件判断语句
         策略模式的缺点:
             客户端必须知道所有的策略类,自己去决定使用哪一个

    3:使用场合

             系统有许多类,而他们的区别仅仅在于它们的行为。         
             动态选择几种算法中的一种
            一个对象有很多行为

    4:实现步骤

       1、定义抽象角色类,定义好各个实现的共同抽象方法
       2、定义具体策略类,具体实现父类的共同方法

       3、定义环境角色类,私有化申明角色变量,重载构造方法,执行抽象方法

       抽象策略类(Strategy

    package StrategyPatternMode;
    //抽象类
    public  interface Strategy {
    	public void operate(); 
    }
    
       具体策略类

    以去上班的方式来作为具体策略

    坐公交方式:

    package StrategyPatternMode;
    /**
     * 
     * @author vegetable
     * 具体策略类
     */
    public class ByBus implements Strategy {
    	@Override
    	public void operate() {
    		// TODO Auto-generated method stub
    		System.out.println("坐公交车去上班");
    	}
    
    }
    坐地铁方式:

    package StrategyPatternMode;
    /**
     * 具体策略类
     * @author vegetable
     *
     */
    public class ByMetro implements Strategy{
    
    	@Override
    	public void operate() {
    		System.out.println("坐地铁去上班");
    	}
    
    }
    环境类(Context)

    package StrategyPatternMode;
    /**
     * 
     * @author zxf
     * 具体策略类
     */
    public class Context {  
        private Strategy strategy;  
        //构造函数,要你使用哪种方式去上班 
        public Context(Strategy strategy){  
             this.strategy = strategy;  
        }  
        public void setStrategy(Strategy strategy){  
             this.strategy = strategy;  
        }  
        public void operate(){  
             this.strategy.operate();  
        }  
    } 

    下面就是使用的情况了
    package StrategyPatternMode;
    /**
     *策略模式demo
     * 
     */
    public class StrategyPatternDemo {
    public static void main(String[] args) {
    	Context context;  
    	  
        System.out.println("----------时间充足坐公交比较便宜---------------");  
        context = new Context(new ByBus());  
        context.operate();  
        System.out.println("
    ");  
     
        System.out.println("----------时间不够了选择坐地铁比较靠谱---------------");  
        context.setStrategy(new ByMetro());  
        context.operate();  
    }
    }
    根据不同的情况选择不同的交通方式去上班




  • 相关阅读:
    MySQL字符集 utf8 和 utf8mb4 区别及排序规则 general_ci 和 unicode_ci 和 bin 的区别
    tp5定时任务
    PHP7.X连接SQLSERVER数据库(CENTOS7)
    php 连接sqlserver
    接口踩坑:Status (blocked:other)
    php 一些常用函数
    tp5支付宝和微信支付
    php 数组相关方法的一些实际妙用
    MySQL如何利用索引优化ORDER BY排序语
    composer命令介绍之install和update及其区别
  • 原文地址:https://www.cnblogs.com/vegetate/p/9997272.html
Copyright © 2011-2022 走看看