首页 > 代码库 > 设计模式--策略模式(strategy)
设计模式--策略模式(strategy)
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 }
/*每个人都会吃饭,所以eating()可以继承,但singing()就不能一样处理了,因为有些人天生不能发声,或者差别很大
所以在Person类中就不应该写这个方法,否则Dummy哑巴类就会从Person类继承到singing(),这明显是不合理的,
而这里可以考虑将singing()独立成一个singable接口,
1 public interface Singable {2 public void sing();3 }
实现singable的ZhangSan:
public class ZhangSan extends Person implements Singable{ @Override public void sing() { // TODO Auto-generated method stub } }
再根据需要实现这个接口,原理上是可以实现,但是接口有个缺点:
就是不能实现具体的方法:接口什么都不做,你实现后还是要写代码,根本做不到代码重用,如果实现接口的类数量很大的话,
那这个工作量很不划算。
**虽然每个人唱歌都不同,而且还有人不能唱,但其实唱歌的种类是可以预计的
唱法也就那么几种:通俗,美声,民族,R&B·····
接口是不能重用代码,那我们就先预先实现一组的接口实现类
通俗唱法:
public class TongSuSinging implements Singable { @Override public void sing() { System.out.println("找不到方向,到彩虹天堂·····"); }}
美声唱法:
public class MeiShengSinging implements Singable{ @Override public void sing() { System.out.println("you and me,together."); }}
民族唱法:
public class MinZuSinging implements Singable{ @Override public void sing() { System.out.println("五十六个民族,五十六枝花...."); } }
*/
设计模式--策略模式(strategy)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。