策略模式
2015-11-03 15:39
197 查看
定义:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。(把会变化的部分取出并“封装”起来,好让其他部分不会受到影响)
2、针对接口编程,而不是针对实现编程。(行为将被放在分开的类中,此类专门提供某行为接口实现,这样超类就不在需要知道行为的实现细节)在不涉及java interface的情况下,“针对接口编程”,关键就在多态。
3、多用组合,少用继承。(“有一个”可能比“是一个”更好)
1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。(把会变化的部分取出并“封装”起来,好让其他部分不会受到影响)
2、针对接口编程,而不是针对实现编程。(行为将被放在分开的类中,此类专门提供某行为接口实现,这样超类就不在需要知道行为的实现细节)在不涉及java interface的情况下,“针对接口编程”,关键就在多态。
3、多用组合,少用继承。(“有一个”可能比“是一个”更好)
package com.duck; public abstract class flybehavior { public abstract void fly(); } package com.duck; public class flynoway extends flybehavior { @Override public void fly() { // TODO Auto-generated method stub System.out.println("can not fly"); } } package com.duck; public class flywithwings extends flybehavior { @Override public void fly() { // TODO Auto-generated method stub System.out.println("fly with wings"); } } package com.duck; public abstract class quackbeh { public abstract void quack(); } package com.duck; public class guguquack extends quackbeh { @Override public void quack() { // TODO Auto-generated method stub System.out.println("gugu~~"); } } package com.duck; public class mutequack extends quackbeh { @Override public void quack() { // TODO Auto-generated method stub System.out.println("~~"); } } package com.duck; public class squack extends quackbeh { @Override public void quack() { // TODO Auto-generated method stub System.out.println("zhizhi~~"); } } package com.duck; public abstract class duck { private flybehavior fb; private quackbeh qb; public flybehavior getFb() { return fb; } public void setFb(flybehavior fb) { this.fb = fb; } public quackbeh getQb() { return qb; } public void setQb(quackbeh qb) { this.qb = qb; } public abstract void display(); public void performFly(){ fb.fly(); } public void performQuack(){ qb.quack(); } } package com.duck; public class muteduck extends duck { public muteduck(){ this.setFb(new flywithwings()); this.setQb(new mutequack()); } @Override public void display() { // TODO Auto-generated method stub System.out.println("no quack~~"); } } package com.duck; public class initial { public static void main(String[] args) { // TODO Auto-generated method stub duck dk = new muteduck(); dk.performFly(); dk.performQuack(); dk.display(); dk.setFb(new flynoway()); dk.performFly(); dk.performQuack(); dk.display(); } }
相关文章推荐
- 算法与设计模式
- 线性表的实现(四)双向链表
- RedHat Enterprise Linux 4(32) matlab(32)的安装与c++混合编程
- 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
- TA+3框架配置多个数据库链接
- 二叉排序树的基本操作(完整代码)
- 批量标注数量大的地图注记
- ios平移与抖动动画的简单实现
- BZOJ 1194: [HNOI2006]潘多拉的盒子( BFS + tarjan + dp )
- android SQLite使用SQLiteOpenHelper类对数据库进行增删查改
- CheckBox全选、取消全选
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。
- 突击Mercurial SCM(HG)12---解决repository is unrelated的问题
- php实现分页显示
- C# DataTable去除某列重复的数据
- C# Post数据和接收简单示例
- CocoaPods安装和使用教程
- OHCI(二) - OHCI控制器驱动
- IIS 发布Webservice问题
- POJ 1182 食物链