设计模式:策略模式(strategy)

本文通过一个肤色展示的例子,详细介绍了策略模式的设计思想。策略模式包含三种角色:环境、抽象策略及具体策略,适用于需要多种实现方式的接口场景。通过在环境角色中注入不同的策略实例,可以在运行时动态改变行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式
    三种角色:环境,抽象策略,具体策略
    使用场景:   

                1.一个接口有多个实现类,这些实现类各有区别
                2.需要封装一组动作或算法
                3.将动作和具体的调用者解耦合


/**
 * @Author : haojiangt
 * @Description : 抽象策略。接口或者抽象类中的抽象方法可以代表一组动作或者是一组算法等等
 *                由它的实现类来实现具体的操作。
 **/

/**
 * 肤色的接口里定义了一个得到肤色的接口
 */
public interface SkinColor {
    void getColor();
}


/**
 * @Author : haojiangtao
 * @Description : 具体的一个实现类,实现了接口的getColor方法
 **/

public class WhiteSkin implements SkinColor{
    /**
     * 实现了getColor()方法
     */
    @Override
    public void getColor() {
        System.out.println("My skin is white");
    }
}

/**
 * @Author : haojiangt
 * @Description :具体的一个实现类,实现了接口的getColor方法
 **/
public class YellowSkin implements SkinColor{
    /**
     * 实现了getColor()方法
     */
    @Override
    public void getColor() {
        System.out.println("My skin is yellow");
    }
}


/**
 * @Author : haojiangt
 * @Description : 环境角色,持有一个策略的引用,实例不同,具体的实现就不同
 *                在初始化时,决定注入哪个实例。这样一个算法或动作的不同实现就可以自由切换。

 **/

/**
 * 使用场景: 一个接口有多个实现类,这些实现类各有区别
 *          需要封装一组动作或算法
 *          将动作和具体的调用者解耦合
 */
public class People {
    private SkinColor skinColor;

    /**
     * 在构造方法中注入SkinColor
     * @param skinColor
     */
    public People(SkinColor skinColor) {
        this.skinColor = skinColor;
    }

    public void showColor(){
        this.skinColor.getColor();
    }


    public static void main(String[] args){
        //实例化People时,注入skinColor的不同实现类,得到不同结果
        People first = new People(new YellowSkin());
        first.showColor();
        People second = new People(new WhiteSkin());
        second.showColor();
    }
}

输出:
My skin is yellow
My skin is white

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值