码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式--策略模式(strategy)

时间:2015-02-02 19:48:37      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

1.策略模式(strategy [‘stræt?d?i])

      我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈)

     看了很多例子,都是在说鸭子的,那个例子很好,然后我就照葫芦画瓢了,

    他们生产鸭子,我们就制造人

     所以,父类 Person类就出来了     

技术分享
1 public abstract class Person {
2     //唱歌可就不一样了,唱法不同,唱功不同;而且哑巴不能唱歌
3     public void singing(){
4         System.out.println("我要唱歌");
5     }
6     
7     //吃饭,大家没什么区别吧
8     public abstract void eating();
9 }
View Code

 /*每个人都会吃饭,所以eating()可以继承,但singing()就不能一样处理了,因为有些人天生不能发声,或者差别很大

       所以在Person类中就不应该写这个方法,否则Dummy哑巴类就会从Person类继承到singing(),这明显是不合理的,

       而这里可以考虑将singing()独立成一个singable接口

技术分享
1 public interface Singable {
2      public void sing();
3 }
View Code

    实现singable的ZhangSan:

技术分享
public class ZhangSan extends Person implements Singable{
    @Override
    public void sing() {
        // TODO Auto-generated method stub
        
    }
    
}
View Code

       再根据需要实现这个接口,原理上是可以实现,但是接口有个缺点:

       就是不能实现具体的方法:接口什么都不做,你实现后还是要写代码,根本做不到代码重用,如果实现接口的类数量很大的话

       那这个工作量很不划算。

      **虽然每个人唱歌都不同,而且还有人不能唱,但其实唱歌的种类是可以预计的

         唱法也就那么几种:通俗,美声,民族,R&B·····

    接口是不能重用代码,那我们就先预先实现一组的接口实现类

  通俗唱法:

技术分享
public class TongSuSinging implements Singable {

    @Override
    public void sing() {
        System.out.println("找不到方向,到彩虹天堂·····");
    }

}
View Code

美声唱法:

技术分享
public class MeiShengSinging implements Singable{

    @Override
    public void sing() {
        System.out.println("you and me,together.");
    }

}
View Code

民族唱法:

技术分享
public class MinZuSinging implements Singable{

    @Override
    public void sing() {
        System.out.println("五十六个民族,五十六枝花....");
    }
    
}
View Code

 

 

 

 

 

 

 

  

   */

 

 

 

 

    

设计模式--策略模式(strategy)

标签:

原文地址:http://www.cnblogs.com/tommy-huang/p/4268489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!