每天一个设计模式之策略模式

策略模式

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

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

//环境角色类
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 );
    }
}

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

原文地址:https://www.cnblogs.com/wangshouchang/p/7456040.html