设计模式总结(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32600929/article/details/82812276

设计模式总结(2)

策略模式

如果写了一个接口的多个实现类,而这些实现类功能相似,这个时候若还使用传统的类似if…else…的方法进行判断,其效率会非常低下。可以将这些功能相似的实现类封装起来,使它们可以相似替换。这就是策略模式。
策略模式是一种行为型模式,类的行为或者算法可以在运行时更改。

抽象策略

通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。

interface Strategy {
    public void doSomeThing();
}

具体策略

具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。

class ConcreteStrategy1 implements Strategy {
    @Override
    public void doSomeThing() {
        System.out.println("具体策略1");
    }
}
class ConcreteStrategy2 implements Strategy {
    @Override
    public void doSomeThing() {
        System.out.println("具体策略2");
    }
}

封装类

也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。

class Context {
    private Strategy strategy;

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

    public void execute() {
        strategy.doSomeThing();
    }
}

测试

public class Client {
    public static void main(String[] args){
        Context context;
        System.out.println("-----执行策略1-----");
        context = new Context(new ConcreteStrategy1());
        context.execute();

        System.out.println("-----执行策略2-----");
        context = new Context(new ConcreteStrategy2());
        context.execute();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32600929/article/details/82812276