【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()方法,即便可以运行






郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。