zoukankan      html  css  js  c++  java
  • 每天一个设计模式之策略模式

    策略模式

    策略模式是定义了算法族,分别封装起来,让他们之间可以互相转换,让算法的变化独立于使用算法的人

    一个最简单的策略模式的原型

    //环境角色类
    public class Context {
        private Strategy strategy;
        
        public Context(Strategy strategy){
            this.strategy = strategy;
        }
        
        public void contextInterface(){
            strategy.strategyInterface();
        }   
    }
    
    //抽象策略类
    public interface Strategy {
        public void strategyInterface();
    }
    
    //具体策略类1 
    public class ConcreteStrategyA implements Strategy {
        @Override
        public void strategyInterface() {
    	    //重写算法
        }
    }
    	
    //具体策略类2
    public class ConcreteStrategyB implements Strategy {
        @Override
        public void strategyInterface() {
            //重写算法
        }
    }
    

    首先我们来说明一下这个策略模式的骨架是有哪些构成的,
    环境(Context)角色 持有 策略对象的引用
    抽象策略(Strategy)角色 抽象的对象,提供给环境对象持有,并且具体策略类会继承重写此类。
    具体策略(ConcreteStrategy)角色 对算法的重写和包装

    那么我们现在用一个简单例子来说明这个设计模式 叫做老王家的孩子如何吃饭 策略

    //抽象策略类   吃饭策略
    public interface EatStrategy {
        public double eat(int count);
    }
    
    // 子算法策略
    // 大儿子吃饭
    public class BigStrategy implements EatStrategy {
        @Override
        public double eat(int count) {  
            System.out.println("大儿子吃饭");
            return count;
        }
    }
    
    // 二儿子吃饭
    public class TwoStrategy implements EatStrategy {
        @Override
        public double eat(int count) {  
            System.out.println("二儿子吃饭");
            return count;
        }
    }
    
    // 妈妈让儿子们去吃饭
    //环境角色
    public class Mam{
        //持有一个具体的策略对象
        private Strategy strategy;
         
        public Mam(Strategy strategy){
            this.strategy = strategy;
        }
       
        public double MamLetEat(int count){
            return this.strategy.eat(count);
        }
    }
    
    //客户端
    public class Client {
        public static void main(String[] args) {
            //创建策略对象
            Strategy strategyBig = new BigStrategy();
            Strategy strategyTwo = new TwoStrategy();
            //创建环境
            Mam mam1 = new Mam(strategyBig );
            Mam mam2 = new Mam(strategyTwo );
            // 开始吃饭
            int count1 = mam1.MamLetEat(300);
            int count2 = mam2.MamLetEat(500);
            System.out.println("大儿子吃了  :" + count1 );
            System.out.println(" 二儿吃了   :" + count2 );
        }
    }
    

    **策略模式的理解 **
    策略模式的特点是将一个算法系列进行均衡,对一些具体的算法。大家有一些部分是公用的,有一些需要自己的部分,但是大家是平等的,这样大利用均衡性。算法之间可以相互替代。所有的策略模式的算法都是相互独立互不影响大

  • 相关阅读:
    JavaScript进阶-BOM和DOM
    JavaScript基础
    CSS2-属性
    CSS1-选择器
    HTML-常用标签
    判断回文
    课堂作业
    动手动脑
    原码反码补码
    Java第一次考试作业
  • 原文地址:https://www.cnblogs.com/wangshouchang/p/7456040.html
Copyright © 2011-2022 走看看