2 策略模式

来源:互联网 发布:微波炉选购 知乎 编辑:程序博客网 时间:2024/06/08 15:56
    策略模式:他定义了算法家族,分别封装亲爱,让他们之间可以互相替换,次模式让算法的变化,不会影响到使用算法的客户。
    

Strategy类:定义定义所有支持的算法的公共接口
ConcreteA(BC):具体的策略类,封装了具体的算法或行为
Context:上下文用一个ConcreteStrategy来维护一个Strategy对象的引用


public class StrategyTest {
public static void main(String[] args){
Strategy discount = new Discount();
Strategy addMon = new AddMoney();

Context context = new Context(discount);
Context context1 = new Context(addMon);
context.getMoney(100);
context1.getMoney(100);
}
}

abstract class Strategy{
public abstract void discount(double money);
}


class Discount extends Strategy{

@Override
public void discount(double money) {
System.out.println("打折方法 原价:"+money+" 折扣价:"+money*0.8);
}
}

class AddMoney extends Strategy{

@Override
public void discount(double money) {
System.out.println("返现方法 原价:"+money+"返现价:"+money*0.1);
}
}

class Context{
private Strategy strategy;

public Context(Strategy strategy) {
this.strategy = strategy;
}

public void getMoney(double money){
strategy.discount(money);
}
}
    策略模式是一种定义一系列算法的方法,从概念上来看,所有算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法。
策略模式的重心
    策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

算法的平等性
    策略模式的最大特点就是策略算法的平等。策略算法是相同行为的不同实现。
    优点:
    1. 算法是相互独立的,相互之间没有依赖。

运行时策略的唯一性:同时只能使用一个策略

策略模式的优点
    1. 提供了管理相关算法族的办法,可以将共有代码一刀平父类里面从而避免代码重复
    2. 使用策略模式可以避免多重条件if-else语句,如果不用策略模式用一堆ifelse来判断不同算法实在很低效
    3. 可以动态的改变对象的行为
策略模式的缺点:
    1. 策略模式只适用于客户端知道算法或行为的情况
    2. 策略模式把每个策略实现都单独封装成为类,如果备选策略很多的话,对象的数目比较客观

























0 0
原创粉丝点击