在手机应用领域为何有那么多失败的开发者?
2012-07-12 11:44
309 查看
HeadFirst设计模式学习笔记((JAVA版)鸭子与策略(Strategy)模式
原文转自:http://www.cnblogs.com/nokiaguy/archive/2009/02/11/1388168.html
策略模式的设计原则如下:
1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。
2. 应针对接口,而不是类进行编程。
3. 在类中应多用组合,少用继承。
例子:
我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为:
1. display
2. swim
3. fly(飞)
4. quack(叫)
其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方法。fly和quack并不是所有鸭子的特性,如橡皮鸭子即不会飞,也不会叫。因此,可以将这两个方法看作是两个行为,可将每一个行为设计成一个接口。这样可以和Duck类完全脱离。因为,fly和quack与Duck一点关系都没有(别的东西也可能fly和quack),然后不同的fly和quack分别用实现相应接口的类表示。
下面是关于Duck的完整代码:
fly行为
quack行为
实现Duck类
建立不同的鸭子类
调用代码如下:
原文转自:http://www.cnblogs.com/nokiaguy/archive/2009/02/11/1388168.html
策略模式的设计原则如下:
1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。
2. 应针对接口,而不是类进行编程。
3. 在类中应多用组合,少用继承。
例子:
我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为:
1. display
2. swim
3. fly(飞)
4. quack(叫)
其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方法。fly和quack并不是所有鸭子的特性,如橡皮鸭子即不会飞,也不会叫。因此,可以将这两个方法看作是两个行为,可将每一个行为设计成一个接口。这样可以和Duck类完全脱离。因为,fly和quack与Duck一点关系都没有(别的东西也可能fly和quack),然后不同的fly和quack分别用实现相应接口的类表示。
下面是关于Duck的完整代码:
fly行为
// 飞行接口 public interface FlyBehavior { public void fly(); } // 飞 public class FlyWithWings implements FlyBehavior { public void fly() { System.out.println("正在用翅膀飞行"); } } // 不飞 public class FlyNoWay implements FlyBehavior { public void fly() { System.out.println("不会飞"); } } //坐火箭飞 public class FlyRocketPowered implements FlyBehavior { public void fly() { System.out.println("坐火箭飞"); } }
quack行为
// 叫接口 public interface QuackBehavior { public void quack(); } // 嘎嘎叫 public class Quack implements QuackBehavior { public void quack() { System.out.println("嘎嘎叫"); } } // 吱吱叫 public class Squeak implements QuackBehavior { public void quack() { System.out.println("吱吱叫"); } } // 不叫 public class MuteQuack implements QuackBehavior { public void quack() { System.out.println("不会叫"); } }
实现Duck类
// 鸭子超类 public abstract class Duck { // 默认的行为 FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck() { } public void setFlyBehavior (FlyBehavior fb) { flyBehavior = fb; } public void setQuackBehavior(QuackBehavior qb) { quackBehavior = qb; } abstract void display(); public void performFly() { flyBehavior.fly(); } public void performQuack() { quackBehavior.quack(); } public void swim() { System.out.println("正在游泳~~"); } }
建立不同的鸭子类
// 野鸭 public class MallardDuck extends Duck { public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyWithWings(); } public void display() { System.out.println("绿头鸭"); } } // 红头鸭 public class RedHeadDuck extends Duck { public RedHeadDuck() { flyBehavior = new FlyWithWings(); quackBehavior = new Quack(); } public void display() { System.out.println("红头鸭"); } } // 橡皮鸭 public class RubberDuck extends Duck { public RubberDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Squeak(); } public void display() { System.out.println("橡皮鸭"); } } //模型鸭 public class ModelDuck extends Duck { public ModelDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Quack(); } public void display() { System.out.println("模型鸭"); } }
调用代码如下:
public class MiniDuckSimulator { public static void main(String[] args) { MallardDuck mallard = new MallardDuck(); RubberDuck rubberDuckie = new RubberDuck(); RedHeadDuck redHeadDuck = new RedHeadDuck(); ModelDuck model = new ModelDuck(); mallard.performQuack(); rubberDuckie.performQuack(); redHeadDuck.performQuack(); model.performFly(); model.setFlyBehavior(new FlyRocketPowered()); model.performFly(); } }
相关文章推荐
- 手机应用开发者需注意的20个事项
- 手机短信验证码接口在各领域的应用
- 智能手机的工业控制应用方案——SimpleWiFi在工业控制领域应用
- 【博客话题】从手机应用开发者论开发创业
- 前苹果游戏设计师谈iPhone应用开发者的失败原因
- 魅族手机安装应用apk失败
- 手机开发者要重视应用创新
- oppo手机安装应用失败,提示版本不兼容
- 智能手机的工业控制应用方案——SimpleWiFi在工业控制领域应用
- 手机游戏逐成移动互联网应用领域“弄潮儿”
- 我身边的手机应用开发者
- 大型应用强者愈强,新的开发者正在寻找更细分的领域
- 解决魅族手机上安装签名应用失败的Bug
- 关于多语言获取手机正在运行应用信息失败
- 国内手机应用开发者6成亏损 广告或是突破口
- Path创始人戴夫・莫林:手机应用的第一版本通常都会失败
- 宋立波:闲谈运营商手机软件商城和应用工厂(运营商和手机开发者请看来)
- 有关苹果手机下载应用后提示不受信任的企业开发者解决方案:
- 手机应用开发者必看:移动开发者大势图
- (在腾讯上看到的一片文章,希望在java和Android踌躇或徘徊的人一些启示)国内手机应用开发者6成亏损 广告或是突破口