设计模式实例学习-策略模式
来源:互联网 发布:linux mint 安装 wine 编辑:程序博客网 时间:2024/05/25 19:57
设计模式实例学习-策略模式
原创博客,转载请注明出处:
http://blog.csdn.net/u011035622/article/details/49745553
此前在某公司面试时,面试官问我说有没有自己写什么东西分享,我说有一些,但是很多东西发现别人都写过了,自己慢慢就不太想再写了。他跟我说让我继续坚持写,总会有好处的。后来也知道,写博客有时候也许不一定是分享,也可以是对自己学习的总结,加深印象。秋招对于我,其实在10月末就已经结束了,休息一阵,不敢颓废,现在打算开始写些东西记录自己的学习过程。
定义
(行为模式)
策略模式,我的理解就是通过将算法策略分别封装起来,面向接口实现,达到可以动态替换不同的算法,改变策略的目的。
此模式让算法的变化独立于使用算法的客户!
实例分析
- 抽象策略:两个接口
分别设置学生专业、学生社团
Profession.java
package Strategy;interface Profession {//专业 public void learning();}
Club.java
package Strategy;interface Club{//社团 public void playing();}
- 学生类
Student.java
package Strategy;public class Student { private Profession mProfession; private Club mClub; public void setProfession(Profession mProfession){//传入具体策略类(专业) this.mProfession = mProfession; } public void setClub(Club mClub){//传入具体策略类(社团) this.mClub = mClub; } public void makeIntroduction(){//作个自我介绍 mProfession.learning(); mClub.playing(); }}
可以看到,student类中有两个内部的接口,分别用于策略的设置实现。事实上经常写回调接口的话,这个东西一看也很容易知道。
- 在Main中测试实现。
另外为了方便,我实现接口的具体策略类也放到了这里面=。=
package Strategy;public class Main { public static void main(String[] args) { Student hww = new Student(); hww.setProfession(new CommunicationsPro()); hww.setClub(new InformationClub()); hww.makeIntroduction(); System.out.println("\n____把每个专业或社团当做一种策略算法,面向接口来设置对应的具体策略,可以动态更改____\n"); hww.setProfession(new PhysicsPro()); hww.setClub(new StudentUnioClub()); hww.makeIntroduction(); }}/* 以下均为具体策略类——————————————————*/class CommunicationsPro implements Profession{//通信专业 @Override public void learning() { System.out.println("通信专业什么都搞。。"); }}class PhysicsPro implements Profession{//物理专业 @Override public void learning() { System.out.println("专心学物理。"); }}class ChemistryPro implements Profession{//化学专业 @Override public void learning() { System.out.println("专心学化学。"); }}class InformationClub implements Club{//信息中心社团 @Override public void playing() { System.out.println("玩视频编辑,做海报,组织各种活动。"); }}class DebateClub implements Club{//辩论社团 @Override public void playing() { System.out.println("打辩论赛。"); }}class StudentUnioClub implements Club{//校学生会 @Override public void playing() { System.out.println("开会。再开会。继续开会。"); }}
- 输出:
通信专业什么都搞。。玩视频编辑,做海报,组织各种活动。____把每个专业或社团当做一种策略算法,面向接口来设置对应的策略,可以动态更改____专心学物理。开会。再开会。继续开会。
实例如期输出。
策略模式优缺点
优点就是弹性强,算法独立于客户,更改算法不用对客户类进行修改,减少修改功能时对整体的代码的影响,而且能够动态的对算法策略进行修改。
.
缺点是每多一种算法,类增加一个,导致类数量众多,且客户需要了解所有策略类的功能,自行对选择实现策略进行判断。可以通过结合工厂方法、代理或享元模式弥补这个缺点
策略模式的使用场景
- 多个类只有在算法或行为上有所不同。
- 需要动态设置算法行为时。
- 需要屏蔽具体的算法细节时。
1 0
- 设计模式实例学习-策略模式
- 策略设计模式实例
- 设计模式---策略模式+实例
- 设计模式实例-策略模式
- 设计模式---策略模式 实例
- 策略模式--设计模式学习
- 设计模式学习----策略模式
- 学习设计模式-----策略模式
- 【设计模式】策略模式学习
- 设计模式学习-----策略模式
- 设计模式学习------策略模式
- 设计模式学习--策略模式
- 设计模式学习--策略模式
- 学习设计模式-策略模式
- 设计模式学习--策略模式
- 设计模式学习:策略模式
- 设计模式-策略模式学习
- 设计模式php实例:策略模式
- Unity编辑时打左括号出现异常的问题
- 自己testkvo的代码心的(有一行代码要特别的注意)
- Pentest - SSH login
- 陈硕-应届生应聘程序员,简历上能写书单吗?最好有哪些信息?
- 黑马程序员——基础知识——多态
- 设计模式实例学习-策略模式
- 正则表达式基础
- Spring MVC使用@ResponseBody无法跳转到对应的jsp页面以及ie8下报错的解决方法
- hog+svm 行人检测
- 陈硕-Linux C++ 服务器端这条线怎么走?一年半能做出什么?
- 数据库的三级模式
- HDU 5497 Inversion(树状数组)
- Java正则表达式示例
- [转]Vi/Vim查找替换使用方法