【ThinkingInJava】12、完全解耦,策略设计模式(2)

Waveform.java

/**
* 书本:《Thinking In Java》
* 功能:完全解耦,策略设计模式
* 	  这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果
* 文件:Apply.java
* 时间:2015年4月2日16:50:55
* 作者:cutter_point
*/
package Lesson9Interfaces.filters;

public class Waveform
{
	private static long counter;	//默认初始化为0
	private final long id = counter++;		//先赋值给id为0

	public String toString()
	{
		return "Waveform " + id;
	}
}

Filter.java

/**
* 书本:《Thinking In Java》
* 功能:完全解耦,策略设计模式
* 	  这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果
* 文件:Filter.java
* 时间:2015年4月2日20:03:00
* 作者:cutter_point
*/
package Lesson9Interfaces.filters;

public class Filter
{
	public String name()
	{
		return this.getClass().getSimpleName();
	}

	public Waveform process(Waveform input) { return input; }	//记住,请加上public

}

LowPass.java

/**
* 书本:《Thinking In Java》
* 功能:完全解耦,策略设计模式
* 	  这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果
* 文件:LowPass.java
* 时间:2015年4月2日20:04:46
* 作者:cutter_point
*/
package Lesson9Interfaces.filters;

public class LowPass extends Filter
{
	double cutoff;
	public LowPass(double cutoff) { this.cutoff = cutoff; }

	public Waveform process(Waveform input) { return input; }
}

HighPass.java

/**
* 书本:《Thinking In Java》
* 功能:完全解耦,策略设计模式
* 	  这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果
* 文件:HighPass.java
* 时间:2015年4月2日20:07:46
* 作者:cutter_point
*/
package Lesson9Interfaces.filters;

public class HighPass extends Filter
{
	double cutoff;
	public HighPass(double cutoff) { this.cutoff = cutoff; }

	public Waveform process(Waveform input) { return input; }
}

BandPass.java

/**
* 书本:《Thinking In Java》
* 功能:完全解耦,策略设计模式
* 	  这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果
* 文件:BandPass.java
* 时间:2015年4月2日20:07:46
* 作者:cutter_point
*/
package Lesson9Interfaces.filters;

public class BandPass extends Filter
{
	double lowCutoff, highCutoff;
	public BandPass(double lowCut, double highCut)
	{
		this.lowCutoff = lowCut;
		this.highCutoff = highCut;
	}
	public Waveform process(Waveform input) { return input; }
}

/*
 * 这个和前面那个process的耦合特别紧密
 *
 */

输出:

Wind().play() MIDDLE_C  obj1

Percussion().play() MIDDLE_C  obj1

Stringed().play() MIDDLE_C  obj1

Brass.play() MIDDLE_C  obj1

Woodwind.play() MIDDLE_C  obj1

这个看起来似乎很适合Apply.process(),也就【ThinkingInJava】10里面的那个类,我前面有,http://blog.csdn.net/cutter_point/article/details/45098003

后面的文章里面,我们继续对这个类和前面那个Apply类进行对比,看起来相似,

但是你不能把

Filter用于Apply.process()方法,即便可以运行

时间: 2024-10-06 00:13:49

【ThinkingInJava】12、完全解耦,策略设计模式(2)的相关文章

【ThinkingInJava】10、完全解耦,策略设计模式

/** * 书本:<Thinking In Java> * 功能:完全解耦,策略设计模式 * 这里apply.process()方法可以接受任何类型的processor,并将其应用到一个Object对象上,然后打印结果 * 文件:Apply.java * 时间:2015年4月2日16:50:55 * 作者:cutter_point */ package Lesson9Interfaces.classprocessor; import static net.mindview.util.Print

设计模式之策略设计模式

一.何为策略设计模式呢? 在我的理解中,策略模式是尽量使用组合而非继承来实现一个行为,对一个方法的进行封装来使用,在组合类中进行调用时能够随时改变这一方法的运行时的内容.下面让我们来看看将一个实现改成策略模式后的便捷性. 二.一个简单的示例 假设我们有一个抽象的人,他拥有会踢球跟会乐器的技能,然后有一个只会踢球不会乐器的人继承了这个抽象的人类,还有一个只会乐器不会踢球的人继承了这个抽象的人类. 1 abstract class People{ 2 abstract void playBall()

接口的常用用法都有什么?策略设计模式复习总结

从之前的一个总结性话题引出: 从接口.抽象类到工厂模式再到JVM来总结一些问题 涉及的知识点总结如下: 策略模式概念和例子 工厂模式和策略模式比较 策略模式优缺点 策略模式的意义 使用了策略模式的API——HttpServlet类分析 解决策略膨胀问题——享元模式 StrategyPattern:策略模式也算比较简单的,同工厂模式一样都属于面向接口编程……策略模式是对象的行为模式之一,而工厂模式是对象的创建模式!它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口

策略设计模式理解

我们开发过程中,常因为一开始的架构不怎么合理而有可能造成后边客户或者项目经理改需求时,造成我们需要修改原来的代码,一方面是可能写的时间久了回顾起来麻烦,另一方面是牵一发而动全身,改动一个地方造成所有的地方都需要改动,由此可见一个好的架构是多么重要.那么今天给大家讲一种策略设计模式来定义一个利于扩展的框架. 简单举个例子,我们开发一款游戏如果有需要定义一个角色,有武器攻击,有武器防御,那我们可能会觉得很简单,然后一开始定义就直接定义一个父类,再加一个子类实现,代码如下: abstract clas

【设计模式】1.策略设计模式

策略设计模式的定义: 策略设计模式是把每一个算法封装到具有共同接口的独立类中,具体算法之间可以相互替换或者变化,这种变化不会影响客户端. 关键词:[算法封装] [共同接口] [自由替换] 策略设计模式的代码: 1 public interface IStrategy { //共同接口 2 public void doSomething(); 3 } 4 class ConcreteStrategyA implements IStrategy { //具体策略A(算法) 5 public void

Strategy策略设计模式

1.策略模式和状态模式的区别和联系(本部分转载自:http://letscoding.cn/java%E4%B8%AD%EF%BC%8C%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F%E5%92%8C%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB/) 策略模式通过封装一组相关算法,为Client提供运行时的灵活性.Client可以在运行时,选择任一算法,而不改变使用算法的Context.一些

Java编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口.为取得此效果,需要在新类中嵌入一个现有类的private对象.但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public.如果成员对象自身都隐藏了具体实现,那么这种做法是安全的.当用户能够了

应用策略设计模式

设计模式:设计模式(Design pattern)是一套被重复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更easy被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的.设计模式使代码编制真正project化.设计模式是软件project的基石脉络.如同大厦的结构一样. 在最開始学习设计模式时.看着书籍,总是认为设计模式非常easy.但是.每次在实战的时候.常常渴望可以用上设计模式,但总是无法第一时间应用上某种设计模式. 明

JAVA学习笔记--策略设计模式与适配器模式

一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而"策略"包含变化的部分.策略就是传递进去的参数对象,它包含要执行的代码. 这种设计模式将算法分别独立封装起来,然后将其当做参数传递给方法从而让方法产生不同的行为,不同的算法可以进行替换(就像给方法不同的实参).我们可以知道,在策略设计模式中有三个部分:策略.策略引用.接收策略引用的方法(这是笔者自己根据理解给出的名词,并没有查询有没有这些术语).下面通