标签:style blog color io os ar for sp div
策略模式
1 public interface FlyBehavior { 2 public void fly(); 3 }
QuackBehavior:
1 public interface QuackBehavior { 2 3 public void quack(); 4 5 }
对接口的实现:
1 public class FlyWithNoWings implements FlyBehavior { 2 3 @Override 4 public void fly() { 5 System.out.println("不会飞的鸭子"); 6 } 7 8 }
1 public class FlyWithWings implements FlyBehavior { 2 3 @Override 4 public void fly() { 5 System.out.println("会飞的鸭子"); 6 } 7 8 }
1 public class MuteQuack implements QuackBehavior { 2 3 @Override 4 public void quack() { 5 System.out.println("发出的声音是-->>" + "MuteQuack"); 6 } 7 8 }
1 public class Quack implements QuackBehavior { 2 3 @Override 4 public void quack() { 5 System.out.println("发出的声音是-->>" + "Quack"); 6 } 7 8 }
1 public class Squeak implements QuackBehavior { 2 3 @Override 4 public void quack() { 5 System.out.println("发出的声音是-->>" + "Sequck"); 6 } 7 8 }
鸭子抽象类定义:
1 /** 2 * 鸭子具有什么行为就组合什么相关实现类 3 * 4 * @author liang 5 * 6 */ 7 public abstract class Duck { 8 public FlyBehavior mFlyBehavior; 9 public QuackBehavior mQuackBehavior; 10 11 public abstract void display();// 必须实现的一个方法 12 13 // 委托给行为类 14 public void performFly(){ 15 mFlyBehavior.fly(); 16 } 17 18 public void performQuack(){ 19 20 mQuackBehavior.quack(); 21 } 22 23 }
利用多态对具体鸭子实现:
1 public class MallaredDuck extends Duck { 2 3 public MallaredDuck() { 4 mFlyBehavior = new FlyWithWings(); 5 mQuackBehavior = new Squeak(); 6 } 7 8 @Override 9 public void display() { 10 System.out.println("展示一只鸭子"); 11 } 12 13 }
测试:
1 public class MainActivity extends Activity { 2 3 private Button btn; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 btn = (Button) findViewById(R.id.btn); 10 btn.setOnClickListener(new OnClickListener() { 11 12 @Override 13 public void onClick(View v) { 14 Duck mallard = new MallaredDuck(); 15 mallard.performFly(); 16 mallard.performQuack(); 17 } 18 }); 19 } 20 21 }
输出的结果是:
标签:style blog color io os ar for sp div
原文地址:http://www.cnblogs.com/liangstudyhome/p/4024031.html