1.19(设计模式)策略模式

本文介绍了策略模式,即定义一组算法并封装起来使其可相互替换。通过插入代码和加减运算两个例子说明,需针对不同情况定义策略类,将具体类作为参数传递,变换代码时修改参数即可,还给出了参考资料。

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

策略模式,定义一组算法(代码),将它们封装起来,使其可以相互替换。

 

策略模式首先要针对不同的情况(算法、代码)定义不同的策略类。

 

首先看个一段代码

public class Test {
    public static void main(String[] args) {
        insertCode();
    }
    
    
    public static void insertCode() {
        System.out.println("start");
        //此处插入一段代码
        System.out.println("end");
    }
}

要想插入代码有什么方法呢,我们可以定义个Insert接口,在其中定义insertCode方法。

然后具体的类去实现它,并将该类作为参数传递给main中的inserCode方法。

 

插入接口

public interface Insert {
    void insertCode();
}

 

插入接口实现类

public class HelloWroldCode implements Insert {

    @Override
    public void insertCode() {
        // TODO Auto-generated method stub
        System.out.println("Hello World!");
    }

}

 

测试

public class Test {
    public static void main(String[] args) {
        insertCode(new HelloWroldCode());
    }
    
    
    public static void insertCode(Insert insertCode) {
        System.out.println("start");
        insertCode.insertCode();//此处插入一段代码
        System.out.println("end");
    }
}

需要变换插入代码,只需要将insertCode方法的参数修改即可,针对不同的代码都封装成一个类。

插入的那段代码可以看做是策略,策略可以是不同的代码,算法等。

策略模式需要策略对象,就是上述的Insert的实现类。

 

 

下面看下一个加减的例子,加减可以看做是两种策略。

我们把加减抽取出来,形成两种策略。

策略接口

public interface Strategy {
    public int doOperation(int num1, int num2);
}

 

加操作

public class OperationAdd implements Strategy{

    @Override
    public int doOperation(int num1, int num2) {
        // TODO Auto-generated method stub
        return num1 + num2;
    }

}

 

减操作

public class OperationSubstract implements Strategy{

    @Override
    public int doOperation(int num1, int num2) {
        // TODO Auto-generated method stub
        return num1 - num2;
    }

}

 

使用策略的Context类,根据策略的不同会执行不同的操作。

public class Context {
    private Strategy strategy;//策略对象决定最后操作
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public int doOperation(int num1, int num2) {
        return strategy.doOperation(num1, num2);//调用策略对象的doOperation方法
    }
}

 

Main

public class Main {
    public static void main(String[] args) {
        //初始化context对象,并指定策略对象为加操作
        Context context = new Context(new OperationAdd());
        System.out.println("4 + 3 = " + context.doOperation(4, 3));
        //并指定策略对象为减操作
        context = new Context(new OperationSubstract());
        System.out.println("4 - 3 = " + context.doOperation(4, 3));
    }
}
运行结果:
4 + 3 = 7
4 - 3 = 1

 

 

参考资料:

https://www.runoob.com/design-pattern/strategy-pattern.html

https://www.cnblogs.com/zuoxiaolong/p/pattern8.html

 

转载于:https://www.cnblogs.com/huang-changfan/p/11057106.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值