首页 > 代码库 > 策略模式
策略模式
策略模式
一.设计原则:
1)找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
2) 针对接口编程,而不是针对实现编程(例如:鸭子例子当中,fly()和quack()对不同的鸭子是会变的,所以分别定义两个接口FlayBehavior和QuackBehavior中分别饱饭两个方法,但鸭子类不直接继承这两个包含鸭子行为的接口,而是去继承对这两个接口做具体实现的类,在利用该类的时候用到多态就实现了针对接口编程的)
3)多用组合,少用继承
二.下面直接贴出策略模式代码:
定义行为接口:
FlyBehavior:
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 @Override4 public void fly() {5 System.out.println("不会飞的鸭子");6 }7 8 }
1 public class FlyWithWings implements FlyBehavior {2 3 @Override4 public void fly() {5 System.out.println("会飞的鸭子");6 }7 8 }
1 public class MuteQuack implements QuackBehavior {2 3 @Override4 public void quack() {5 System.out.println("发出的声音是-->>" + "MuteQuack");6 }7 8 }
1 public class Quack implements QuackBehavior {2 3 @Override4 public void quack() {5 System.out.println("发出的声音是-->>" + "Quack");6 }7 8 }
1 public class Squeak implements QuackBehavior {2 3 @Override4 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 @Override13 public void onClick(View v) {14 Duck mallard = new MallaredDuck();15 mallard.performFly();16 mallard.performQuack();17 }18 });19 }20 21 }
输出的结果是:
策略模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。