设计模式之策略模式(Strategy Model)

1.使用场景.有个算法有许多版本,使用时用户决定使用哪一个版本。(比如排序算法,有插入排序,选择排序,冒泡排序,快速排序,归并排序等许多排序算法,在使用的时候,用户决定使用哪一个具体的排序算法)。
        
 2.实现
        1)定义一个接口(interface)
        2)每一个子类实现一个版本。
        

PS:加入每一个版本都有一些相同的部分,那么可以使用回调函数的方法来做这些相同的部分。

Example Code: 

打印服务,打印接口类PrintInterface提供PrintA,PrintB两种打印服务,上下文类是PrintContext,用户可以通过它调用打印服务,具体的代码清单如下:


public class PrintContext {
    private PrintInterface printInterface;
    
    public PrintContext(PrintInterface pi){
        this.printInterface = pi;
    }
    
    public void run(){
        this.printInterface.print();
    }
    
    public void changeStrategy(PrintInterface pi){
        printInterface = pi;
    }

}


public interface PrintInterface {
    abstract public void print();
}


public class PrintA implements PrintInterface{

    @Override
    public void print() {
        System.out.println("this is printA");
    }

}

public class PrintB implements PrintInterface{

    @Override
    public void print() {
        System.out.println("this is printB");
    }

}


public class maintest {

    public static void main(String[] args) {
        PrintContext pcContext = new PrintContext(new PrintA());
        pcContext.run();
        
        pcContext.changeStrategy(new PrintB());
        pcContext.run();
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值