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

Design Pattern --- (1)Stragety pattern 策略模式

时间:2016-08-02 16:56:36      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

 

设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

 

设计原则: 针对接口编程,而不是针对实现编程

此设计原则涉及到面向对象编程中一个极其重要的特点:多态。具体说,就是父类指针指向子类对象。一个对象Has a Interface,并针对此接口编程。

而在实例化时,可以让此接口指向任一实现了此接口的子类对象。

 

 

父类Duck,持有飞行行为FlyBehavior及呱呱叫行为QuackBehavior的两个指针

 1 package Duck20160802;
 2 
 3 //Duck类为所有鸭子对象的父类
 4 
 5 public abstract class Duck {
 6     FlyBehavior flyBehavior;
 7     QuackBehavior quackBehavior;
 8     
 9     public Duck(){
10         
11     }
12     
13     public void performFly(){
14         flyBehavior.fly();
15     }
16     
17     public void performQuack(){
18         quackBehavior.quack();
19     }
20     
21     public void swim(){
22         System.out.println("All ducks float,even decoys!");
23     }
24 
25 }

 

MallardDuck继承了Duck,并将FlyBehavior及QuackBehavior指定为具体的飞行和呱呱叫行为

 1 package Duck20160802;
 2 
 3 //红头鸭MallardDuck继承父类Duck,并将quackbehavior制定为Quack方法
 4 //flyBehavior指定为FlyWithWings方法
 5 
 6 public class MallardDuck extends Duck {
 7     public MallardDuck(){
 8         quackBehavior = new Quack();
 9         flyBehavior = new FlyWithWings();
10     }
11     
12     public void display(){
13         System.out.println("I‘m a real Mallard duck!");
14     }
15 
16 }

 

所有的文件

技术分享

 

可以继续扩展FlyBehavior和QuackBehavior,但不用修改Duck类

 

 

设计原则:多用组合,少用继承

 

Design Pattern --- (1)Stragety pattern 策略模式

标签:

原文地址:http://www.cnblogs.com/liujian517/p/5714194.html

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