设计模式策略模式(strategy)(代码片段)

littlepage littlepage     2023-01-16     276

关键词:

1.分析项目中变化部分与不变部分

2.多用组合,少用继承;用行为类组合,而不是行为的继承

案例:

第一步,把行为抽象为接口

package top.littlepage.designPattern.Strategy;

public interface FlyBehavior 
    void fly();

第二步,把具体行为用实体类实现

package top.littlepage.designPattern.Strategy;

public class BadFly implements FlyBehavior

    @Override
    public void fly() 
        System.out.println("--bad fly--");
    
    
package top.littlepage.designPattern.Strategy;

public class NotFly implements FlyBehavior

    @Override
    public void fly() 
        System.out.println("--not fly--");
    

package top.littlepage.designPattern.Strategy;

public class GoodFly implements FlyBehavior

    @Override
    public void fly() 
        System.out.println("--good fly--");
    

第三步,做出具体的环境进行实现该实体

package top.littlepage.designPattern.Strategy;

public class Bird 
    private String name;
    private int age;
    private GoodFly goodfly;
    private BadFly badfly;
    private NotFly notfly;
    
    public Bird() 
        name="";
        age=0;
        goodfly=new GoodFly();
        badfly=new BadFly();
        notfly=new NotFly();
    
    public GoodFly getGoodfly() 
        return goodfly;
    
    public void setGoodfly(GoodFly goodfly) 
        this.goodfly = goodfly;
    
    public BadFly getBadfly() 
        return badfly;
    
    public void setBadfly(BadFly badfly) 
        this.badfly = badfly;
    
    public NotFly getNotfly() 
        return notfly;
    
    public void setNotfly(NotFly notfly) 
        this.notfly = notfly;
    
    public Bird(String name, int age) 
        this.name = name;
        this.age = age;
        goodfly=new GoodFly();
        badfly=new BadFly();
        notfly=new NotFly();
    
    public String getName() 
        return name;
    
    public void setName(String name) 
        this.name = name;
    
    public int getAge() 
        return age;
    
    public void setAge(int age) 
        this.age = age;
    
    

测试:

package top.littlepage.designPattern.Strategy;

public class Test 
    public static void main(String[] args) 
        Bird b=new Bird("小鸟",2);
        System.out.print(b.getName());
        b.getGoodfly().fly();
        
        System.out.print(b.getName());
        b.getBadfly().fly();
        
        System.out.print(b.getName());
        b.getNotfly().fly();
    

控制台截图

技术分享图片

 

策略模式(strategy)利用接口进行抽象,利用实体进行实现抽象,再做出环境进行实现具体的实体

在我们面向对象后,经常利用这种设计模式进行编程,应该是比较简单的一种模式

 

图解设计模式-strategy模式(代码片段)

Strategy(算法)模式可以整体的替换算法的实现部分。 重点说明:使用委托这种弱关联关系可以很方便的整体替换算法。 角色:Strategy策略:该角色负责决定实现策略所需要的接口api。ConcreteStrategy具体策略:该角色负责实... 查看详情

23种设计模式之策略模式——strategy(代码片段)

Strategy--策略模式程序员看问题需要有时间轴的概念,静态可能暴露不出问题,要动态的看。看问题要加上时间轴。一、定义定义一系列算法,把它们一个个封装起来,并且使它们互相替换(变化),该模式使得算法可独立于使... 查看详情

设计模式之策略模式(代码片段)

  今天我们要介绍的设计模式叫做策略模式。策略模式其实就是把不同的策略(方法)封装在不同的类中。在策略模式(StrategyPattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式(... 查看详情

策略模式(strategy-pattern)(代码片段)

策略模式(strategy-pattern)文章目录策略模式(strategy-pattern)一、情景建立二、剖析现存问题三、策略模式四、总结五、补充一、情景建立假如现在有这样的需求:把各种类型鸟类的行为,包括飞翔、叫声进行管理,并能够... 查看详情

设计模式之策略模式(strategy)详解及代码示例(代码片段)

一、策略模式的定义  策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把... 查看详情

策略模式(代码片段)

的略模式概述问题引入解决方案代码体现packagecom.xnn.strategy;/****类(接口)描述:策略接口,所有的具体策略都得实现这个接口*@authorxnn*2018年11月4日下午10:31:14*/publicinterfaceStrategypublicdoublecost(doublenum);packagecom.xnn.strategy;/****类(接口)描... 查看详情

设计模式——策略模式(代码片段)

...。并且,这种替换是不需要客户端来参与的。策略模式在设计模式中算是比较简单的,所以经常与工厂模式等其他的设计模式一起使用。结构:Context:上下文,引用了Strategy对象,负责算法的调用。Strategy:一个接口或者抽象类... 查看详情

38面向对象设计模式之策略模式(strategy)(代码片段)

算法与对象的耦合:  对象可能经常需要使用多种不同的算法,但如果变化频繁,会将类型变得脆弱...动机(Motivation)  在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,... 查看详情

策略模式(代码片段)

策略模式指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,并且这些算法可以相互替换,该模式使得算法可独立使用于它客户的而变化。  该模式有一个算法实现的抽象Strategy,它将不同的算法抽象了... 查看详情

设计模式:strategy(策略)(代码片段)

意图:定义一系列的算法,把他们一个个封装起来,并且使他们可以互相替换,使算法可以独立于使用它的客户变化而变化暂无理解,以后再回来编辑,先贴代码TaxStrategy.h#pragmaonceclassTaxStrategyvirtualdoubleCalculate()=0;virtual~TaxStrategy(... 查看详情

策略模式(代码片段)

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。  这个模式涉及到三个角色... 查看详情

简说设计模式——策略模式(代码片段)

一、什么是策略模式  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。  再比如我们去逛商场... 查看详情

javascript设计模式--行为型--设计模式之strategy策略模式(21)(代码片段)

         JAVASCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVASCRIPT语言来实现主体功能,所以不可能像C++,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVASCRIPT代码,代码只是实现了... 查看详情

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

参考:《大话设计模式》策略模式(Strategy): 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户环境角色(Context):持有一个Strategy对象的引用抽象策略角色(Strat... 查看详情

设计模式_策略方法(代码片段)

模式:行为型模式在策略模式中,我们常见各种策略对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象执行算法。策略模式主要是用来封装一组互相替换的算法,可以根据需要动态地替换Context使用的... 查看详情

编程思想设计模式策略模式(代码片段)

Python版转自https://github.com/faif/python-patterns/blob/master/behavioral/strategy.py#!/usr/bin/envpython#-*-coding:utf-8-*-"""http://stackoverflow.com/questions/963965/how-is-this-strategy-pattern-writ 查看详情

设计模式之策略模式(代码片段)

策略模式就是提供一组固定算法的策略,客户根据自己的需求选择其中一种策略进行执行。特点:预先明确的一组固定算法策略客户需要选择其中一种策略场景:网络爬虫,针对不同的网站,预先提供不同的解析算法网站预先提... 查看详情

策略模式(代码片段)

定义了算法簇,分别封装到接口中,让他们之间可以相互替换或结合使用使得算法的变化独立于使用算法的客户publicinterfaceStrategydoublecalculatePrice(doubleprePrice);publicclassCustomerimplementsStrategy@OverridepublicdoublecalculatePrice(doubleprePrice)retur... 查看详情