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);
// }
分享到:
相关推荐
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口和多个实现该接口的类...
在Java编程语言中,设计模式是一种经过验证的解决常见软件设计问题的最佳实践。单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、...
5. 文件中提到的24种设计模式,涵盖了大多数常用的模式。例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、...
代理模式(Proxy Pattern)是一种常用的设计模式,提供了间接访问目标对象的一种方式,即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。 代理模式...
### Java常用设计模式—追美眉技术详解 #### 设计模式概述 设计模式是一种软件设计中的通用解决方案,它描述了一类问题以及解决该问题的方法。通过应用这些模式,开发人员可以编写出更易于理解、扩展和维护的代码...
在《时间触发嵌入式系统设计模式》这本书中,作者深入浅出地探讨了如何通过精心设计和优化调度策略来实现这种系统。光盘中的内容,特别是与8051系列微控制器相关的部分,提供了实际应用开发的实例,帮助读者更好地...
本文将深入探讨五个关键的设计模式:单例模式、工厂方法模式、策略模式、命令模式和桥接模式,这些都是Java编程中常用且至关重要的设计原则。 首先,我们来看**单例模式**。单例模式确保一个类只有一个实例,并提供...
本书还附带了一些基础类库的介绍,例如列表(List)、迭代器(Iterator)、列表迭代器(ListIterator)、点(Point)、矩形(Rect)等,这些都是在实现设计模式时常用的数据结构。 #### 十一、参考文献与索引 **参考文献与...
python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式
在这个Java常用设计模式的文档中,我们将深入探讨以下几种模式:单例模式、工厂模式、策略模式以及观察者模式。 **单例模式**是一种限制类实例化次数的模式,确保一个类只有一个实例,并提供一个全局访问点。在Java...
### 常用设计模式及Java程序设计 #### 设计模式概述 设计模式是一种软件设计领域中的通用解决方案,用于描述解决常见设计问题的最佳实践。它不仅有助于提高代码的复用性和可读性,还能增强软件架构的灵活性和扩展...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
### .NET 23种常用设计模式 #### 概述 设计模式是在软件工程领域内被广泛采用的一种软件设计思路,旨在解决特定类型的问题。在.NET框架中,这些设计模式同样适用并能帮助开发者构建更加灵活、可扩展及易于维护的...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。在Java编程中,设计模式的应用极大地提高了代码的可读性、可维护性和可复用性。《设计模式——Java语言中的应用》这本书深入探讨...
以下是关于标题和描述中提到的Java常用设计模式的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造器和静态工厂方法实现。双检锁(Double-Check Locking)...
Java语言是实现这些设计模式的常用平台,因为它提供了丰富的面向对象特性,如封装、继承和多态。通过使用设计模式,Java开发者能够更好地遵循“开闭原则”——对扩展开放,对修改关闭,这意味着在不改变已有代码的...
单例模式是一种常用的创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式通常用于控制资源的共享访问,例如数据库连接池、日志管理器等。 #### 实现方式 - **构造函数私有化**:防止外部...
本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...
游戏设计中的工厂模式是一种常用的软件设计模式,它在游戏开发中尤其重要,因为游戏往往涉及到大量对象的创建和管理。在这个“游戏设计4-工厂模式-锻造武器”的主题中,我们将深入探讨工厂模式如何应用于游戏中的...