策略模式(strategy)

个人理解

策略模式封装了算法族,其设计的目标在于对容易发生变化的行为(算法)进行封装,使其在不影响源代码的基础上容易添加删除行为(算法)。

应用场景

    • 主要用于在类与类之间的表现在行为不同,运行时需要选择不同的行为,策略模式则封装了这些行为
    • 考虑到不同的情况会应用不同的算法,也用策略模式封装算法

所体现的设计原则

    1. 对修改封闭,对扩展开放(想要添加新的行为不用修改原有代码)
    2. 多用组合,少用继承
    3. 封装易变化的行为
    4. 针对接口编程,而不是对实现编程

主要组成

    1. 抽象策略  接口或者抽象类都行
    2. 具体策略   实现了接口定义具体的行为或算法
    3. 环境类     保留了一个抽象策略的引用

 

     优点v

  • 使用策略模式有时避免了写条件选择语句
  • 使程序变的易于扩展

    s缺点

  • 客户端必须知道策略类才能决定用哪个
  • 容易造成类爆炸

 

类图

 

 

简单举例

   一个选择苹果或者橘子的策略模式简单应用

 

抽象的策略接口


package strategy_01;


    public interface ChooseFruitStrategy {

        public void  chooseFruit();

}

策略具体实现(苹果)

package strategy_01;


public class ChooseApple implements ChooseFruitStrategy{


    public void chooseFruit() {

        System.out.println("选择苹果");                
    
    }

}

 

策略具体实现(橘子)

package strategy_01;

public class ChooseOrange implements ChooseFruitStrategy{

	
	public void chooseFruit() {
		System.out.println("选择橘子");		
	}

}

环境类

package strategy_01;


public class FruitContext {

    ChooseFruitStrategy cfs;

    public FruitContext(ChooseFruitStrategy cfs) {

        this.cfs=cfs;

    }

    public void makeChoice(){

        cfs.chooseFruit();

    }

}

客户端
 

package strategy_01;


public class Client {

    public static void main(String[] args) {

        FruitContext fc=new FruitContext(new ChooseApple());

        fc.makeChoice();
    
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值