策略模式和模板模式的区别

     首先看下两者的定义:

     策略模式=>策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数

      模板模式=>一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用

      就比如发表博文吧,定义接口发表博文

public interface IpublishBlog{
     //blog 博文
     public boolean publish(Object blog);  
}

public abstract class AbsPublishBlog {
    private String typeJ = "java";
    private double money= 100;
    public double hasMoney(Object blog) {
        //java博文有奖金发,c++没有
        if(blog.getType.equalse(typeJ)){
            return money;
        } else{
            return 0;
        }
    }
}

//定义实现类java c c++...
public class JpublishBlog extends AbsPublishBlog implements IpublishBlog{
    public boolean publish(Object blog){
        System.out.println("发表java博文");
        double monty = super.hasMonty(blog);
        System.out.println("java的才有钱拿啊");
    }
}

      

   如上,其实也可以用模板方法来实现,直接把IpublishBlog就是了


   如此则可以从java实现方式反推两者之间的区别了

   即策略模式以实现接口为主要手段,而模板模式以继承为主要手段。

   那么extends和implements的区别是什么?

   implements可以多实现啊   extends只能单一继承

   1、这也就是说模板模式要求整体流程应该稳定,不然父类修改延伸到子类修改,就让人抓狂了,也不符合设计原则

   2、这也就是说策略模式要求整体流程应该一致,不然有一个定义算法A实现类用不到但是又不得不实现就不符合初衷了


   1、那么再发散回来,结合发表博文这个例子,如果不但是要发表博文,还要宣传论坛政策并且已有现成的接口IPolicy

   那么模板就不合适了,你复写一遍宣传接口?那也不符合设计原则啊。策略就可以很好的实现扩展并且不影响发表博文

   2、那么再发散回来,结合发表博文的这个例子,如果模板模式实现的内容彼此没有什么联系,彼此差异很大,子类也是有选择性的实现部分方法,那么策略模式就不合适了。比如此处使用模板模式实现 发表博文,招聘,申精,广告等,总不能JpublishBlog也实现招聘广告等无用内容


转载于:https://my.oschina.net/ysma1987/blog/667964

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值