`

常用设计模式----策略模式

 
阅读更多
package org.design.patterns;

import java.io.File;
import java.io.FilenameFilter;


/**
 *策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,
 *         此模式让算法的变化独立于使用算法的客户。 
 *
 *策略模式使用多个类来区分不同的行为,使用策略模式避免暴露复杂的、与算法相关的
 *内部数据结构。
 *当一个类中的操作以多个条件分支语句的形式出现的时候,可以使用策略模式
 *将相关的条件分支移入各自的具体策略类中以代替这些条件语句,从而减少系统的复杂度。
 *
 */

//行动算法的顶层接口
interface IBehave{
 public void doSomeThing();
}
//行为算法的实现类1
class BehaveImp1 implements IBehave{
 @Override
 public void doSomeThing() {
         System.out.println(" BehaveImp1 do some thing!");  
 }
}

//行为算法的实现类2
class BehaveImp2 implements IBehave{
 @Override
 public void doSomeThing() {
         System.out.println(" BehaveImp2 do some thing!");  
 }
}

public class Strategy {
 IBehave behave;
 
    public Strategy() {}
 
 public void realDo(){//客户端调用的方法
  behave.doSomeThing();
 }
 //可以通过set注入的方式动态的改变行为算法
 public void setBehave(IBehave behave){
  this.behave=behave;
 } 
}
//====================================
/*
 * java中使用策略模式的地方非常多,下面以java.io.File中的例子进行说明:
 */
class SampleAboutFile{
 public static void main(String[] args) {
  File file=new File(".");
  file.list();//该方法会返回file所在目录中的所有文件的列表

  //该方法就是策略模式的一个例子,list可以通过传参的形式使用不同的策略算法
  file.list(new JavaFileFilter());//带有文件名过滤器的list,会返回特定的文件
 }
}

//不同策略的实现类
class JavaFileFilter implements FilenameFilter{
 @Override
 public boolean accept(File dir, String name) {
    name = name.toLowerCase();
    return name.endsWith(".jave");  
 }
}

class ZipOrJarFileFilter implements FilenameFilter{
 @Override
 public boolean accept(File dir, String name) {
    name = name.toLowerCase();
    return name.endsWith(".zip") || name.endsWith(".jar");  
 }
}

//FilenameFilter接口的实现(相当于策略的接口)
// package java.io;
// public interface FilenameFilter {
//     boolean accept(File dir, String name);
// }
分享到:
评论

相关推荐

    java常用设计模式-策略模式

    java常用设计模式-策略模式

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    Java常用设计模式

    Java的一些常用设计模式,包括单例模式、门面模式、策略模式、观察者模式、建造者模式、简单工厂模式、抽象工厂模式、工厂方法模式、代理模式、动态代理模式,适合初学者掌握

    Jjava常用设计模式

    Java常用的设计模式详解,包含: 1、单例模式 2、工厂模式 3、策略模式 4、观察者模式 等等模式……

    java中的设计模式,主要的设计模式

    设计模式:(常用23种-----像内功心法) 1. 设计模式不是一个知识点 2. 设计模式是一种设计经验的总结 3. 设计模式是用来解决某些场景下的某一类问题--------通用的解决方案 4. 有了设计模式之后,可以让代码更容易被...

    策略模式-java

    策略模式(java),详细介绍了面向对象开发常用模式之一-策略模式,详解了其原理,并经过详细的例子进行演示,通过一个完整的代码演示,让你完全理解策略模式思想,资源好不好下了就知道,感觉不好,亏了你的分,骂...

    Java常用设计模式例子

    以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...

    常用设计模式学习脑图

    常用设计模式脑图,脑图中根据每个设计模式进行了详细的备注解释!我们的最强大脑在哪里?在这里!(单例模式、原型模式、工厂模式、代理模式、策略模式、适配器模式、委派模式、装饰器模式、观察者模式)

    设计模式解析-英文

    开拓视野 82 第9章 Strategy模式 98 第10章 Bridge模式 113 第11章 Abstract Factory模式 138 第12章 专家设计之道 154 第13章 用模式解决CAD/CAM问题 162 第五部分 迈向新的设计方式 第14章 设计模式的原则与策略 ...

    几种常用的设计模式实例

    几种常用的设计模式实例:单例 工厂 代理 命令 策略

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 单最常用的设计模式入门,比如AbstractFactory模式、Adapater模式、Composite模式、Decorator模式、Factory模式、Observer模式、Strategy模式、Template模式等

    设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - ...

    常用设计模式例子.zip

    常用设计模式例子:工厂模式,抽象工厂,策略模式等...

    常用设计模式java实现

    策略模式、观察者模式、装饰模式、适配器模式、单例模式、工厂方法模式、门面模式,java语言实现的例子。

    研磨策略模式

    在网上搜到的资源,很详细的介绍了最常用最简单的设计模式--策略模式

    12种常用设计模式代码实现

    包含策略模式、抽象工厂模式、代理模式、单例模式、工厂方法、观察者模式 静态工厂方法、命令模式、适配器模式、外观模式、原型模式、组合模式

    设计模式文档

    2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 Abstract Factory模式 35...

    设计模式全套学习ppt

    设计模式全套学习ppt 能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、

    六种常用设计模式的java实现源码

    单例模式、代理模式、工厂模式、适配器模式、策略模式、模板方法模式的java源码实现

Global site tag (gtag.js) - Google Analytics