策略模式

国境之南时代 国境之南时代     2022-09-20     403

关键词:

1 策略模式实际上就是应对有各种策略(实现方法)的需求。比如超市促销,有多种多样的促销策略,这时候就要想到策略模式,策略模式一般会配合工厂模式使用。

代码如下:

package com.biao.strategy.original;
/**
 * 
 * @author biao
 * 策略模式:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用
 *        算法的客户。
 *       
 * 应用:商场各种促销方案。
 * 
 * 记忆方法:一个超类的算法家族+一个context容器。容器内通过构造方法注入一个超类的引用,容器内写一个方法,实现注入的对象去调用具体的算法。
 */
public class StrategyDemo {
    public static void main(String[] args) {
        
        //缺点:此处为逻辑部分,逻辑应该和界面分离,这里相当于判断多种方法,应该放到逻辑处理中,综合简单工厂模式,
        //将判断创建哪一种对象的逻辑放入具体类中处理。
        Context contextA = new Context(new ConcreteStrategyA());
        Context contextB = new Context(new ConcreteStrategyB());
        
        contextA.contextInterface();
        contextB.contextInterface();
        
    }
}
//抽象算法类,算法接口用于不同的实现方式
abstract class Strategy{
    abstract public void AlgorithmInterface();
}

//具体算法1
class ConcreteStrategyA extends Strategy{

    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub
        System.out.println("算法一的实现方案");
    }
    
}
//具体算法2
class ConcreteStrategyB extends Strategy{
    
    @Override
    public void AlgorithmInterface() {
        // TODO Auto-generated method stub
        System.out.println("算法二的实现方案");
    }
}

//Context类,用来维护一个Strategy,然后调用该具体类的算法。其实就是通过构造方法注入。
class Context{
    Strategy strategy;
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    
    public void contextInterface(){
        strategy.AlgorithmInterface();
    }
}

如上demo中,主函数中创建容器(Context)的时候,需要用户自己注入不同的对象,实际相当于用户去判断传入什么对象,这个判断逻辑通过工厂的方法生成。(实际并没变化,容器中任然维护一个策略超类的引用)代码如下:

package com.biao.strategy.simplefactory;

/**
 * 
 * @author biao
 * 工厂模式和策略模式的简单结合。策略模式用于封装一些算法,供客户端调用。
 * 但是具体创建哪一个策略,是逻辑判断部分,利用工厂模式的多态,生成不同算法的
 * 对象,然后调用该对象的算法。
 */
public class StrategyFactoryDemo {
	public static void main(String[] args) {
		Context contextA = new Context("模式A");
		Context contextB = new Context("模式B");
		
		contextA.contextInterface();
		contextB.contextInterface();
	}
}
//抽象算法类,算法接口用于不同的实现方式
abstract class Strategy{
	abstract public void AlgorithmInterface();
}

//具体算法1
class ConcreteStrategyA extends Strategy{

	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("算法一的实现方案");
	}
	
}
//具体算法2
class ConcreteStrategyB extends Strategy{
	
	@Override
	public void AlgorithmInterface() {
		// TODO Auto-generated method stub
		System.out.println("算法二的实现方案");
	}
}

//Context类,用来维护一个Strategy,然后调用该具体类的算法。
class Context{
	Strategy strategy;
	public Context(String flag){
		switch(flag){
		case "模式A":
			strategy = new ConcreteStrategyA();
			break;
		case "模式B":
			strategy = new ConcreteStrategyB();
			break;
		}
	}
	public void contextInterface(){
		strategy.AlgorithmInterface();
	}
}



 

java设计模式---策略模式(案例解析)

策略模式一、概念1、理解策略模式策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一... 查看详情

策略模式

1策略模式实际上就是应对有各种策略(实现方法)的需求。比如超市促销,有多种多样的促销策略,这时候就要想到策略模式,策略模式一般会配合工厂模式使用。代码如下:packagecom.biao.strategy.original;/****@authorbiao*策略模式:... 查看详情

代码片-策略模式+工厂模式(代码片段)

通过策略类实现不同场景的策略处理,通过工厂模式创建不同的策略对象1.策略实现接口、策略实现类1.1策略接口/***策略接口*/publicinterfaceIWarnRulepublicvoidwarn();1.2策略实现类/***防拆告警策略实现类*/publicclassAntiRemovalWarnimplements... 查看详情

代码片-策略模式+工厂模式(代码片段)

通过策略类实现不同场景的策略处理,通过工厂模式创建不同的策略对象1.策略实现接口、策略实现类1.1策略接口/***策略接口*/publicinterfaceIWarnRulepublicvoidwarn();1.2策略实现类/***防拆告警策略实现类*/publicclassAntiRemovalWarnimplements... 查看详情

代码片-策略模式+工厂模式(代码片段)

通过策略类实现不同场景的策略处理,通过工厂模式创建不同的策略对象1.策略实现接口、策略实现类1.1策略接口/***策略接口*/publicinterfaceIWarnRulepublicvoidwarn();1.2策略实现类/***防拆告警策略实现类*/publicclassAntiRemovalWarnimplements... 查看详情

设计模式之策略模式

策略模式属于对象行为型的设计模式定义:封装了一些列算法,它们之前可以相互替换,此模式使得算法的改变,不会影响到使用它们的客户端  策略模式有以下3个角色组成抽象策略类:所有策略类的父类,为所支持的... 查看详情

设计模式-策略模式

策略模式(strategypattern)策略模式(strategypattern):策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的... 查看详情

设计模式——策略模式

策略模式的重点并不是策略的实现,而是策略的管理的使用!应用场景:当同一种职责,有不同的实现方式的时候可以使用策略管理;角色:1、策略抽象类  2、策略的具体实现   3、策略环境(此类的作用在代... 查看详情

《设计模式之禅》之策略模式

一、策略模式的定义策略模式是一种比较简单的模式,也叫做政策模式,其定义如下:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使用的是面向对象的继承和多态机制,我们看看策略模式的三个... 查看详情

设计模式中的多态——策略模式详解(代码片段)

目录1.关于策略模式2.策略模式详解2.1策略模式定义2.2策略模式的UML类图3.策略模式的优点3.1一个使用策略模式的例子3.2与其他实现方式的对比3.3使用策略模式的优点4.使用工厂方法模式改进原有策略模式5.总结5.参考资料1.关于策... 查看详情

策略模式与工厂模式实践(代码片段)

hello,大家好,我是聪聪。文章目录1.介绍2.策略模式结构2.1分支逻辑解释2.2策略模式设计2.3策略模式代码2.3.1通用策略接口及其各策略实现。2.3.2执行上下文信息2.3.3客户端调用2.3.4总结3.常用示例3.1定义一个策略枚举3.2策... 查看详情

策略模式与工厂模式实践(代码片段)

hello,大家好,我是聪聪。文章目录1.介绍2.策略模式结构2.1分支逻辑解释2.2策略模式设计2.3策略模式代码2.3.1通用策略接口及其各策略实现。2.3.2执行上下文信息2.3.3客户端调用2.3.4总结3.常用示例3.1定义一个策略枚举3.2策... 查看详情

策略模式与工厂模式实践(代码片段)

hello,大家好,我是聪聪。文章目录1.介绍2.策略模式结构2.1分支逻辑解释2.2策略模式设计2.3策略模式代码2.3.1通用策略接口及其各策略实现。2.3.2执行上下文信息2.3.3客户端调用2.3.4总结3.常用示例3.1定义一个策略枚举3.2策... 查看详情

策略模式

策略模式策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。策略模式是对算法的包装,是把算法使用和算法本身分开。策略模式通常是把一系列算法包装到一系列的策略... 查看详情

设计模式笔记-策略模式(代码片段)

设计模式笔记-策略模式文章目录设计模式笔记-策略模式1.策略模式2.常见写法3.常见框架中的策略模式1.策略模式策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换,在使... 查看详情

策略模式

...在于他们的行为的不同一个系统需要动态地在几种算法(策略)中选择一种 三、优点1、开闭原则2、避免使用多种条件转移语句if..else3、提高算法的保密性和安全性 四、缺点1、客户端必须知道所有的策略类,并自行决定... 查看详情

策略模式

琢磨了一下策略模式,发现各个模式之间并非区别特别大,他们都是基于软件project一个大的基础上进行细微化区别的设计。要想熟练的选择和使用各个模式要了解每一个模式的应用场景。比方这次学习的策略模式。在大话设计... 查看详情

设计模式笔记-策略模式(代码片段)

设计模式笔记-策略模式文章目录设计模式笔记-策略模式1.策略模式2.常见写法3.常见框架中的策略模式1.策略模式策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换,在使... 查看详情