论坛首页 Java企业应用论坛

设计模式一:策略模式(Strategy Pattern)

浏览 10168 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2008-03-24  
   今天从图书馆借了本 Head First设计模式,小看了一章,感觉挺不错的所以写下来当作备忘:

   书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.以下是一个简单的实例,具体的流程是:

   先把公共的信息定义在一个父类或者是父接口中,该父类或者父接口中的变量用的都是接口类型(这些接口类型都有其实现的具体子类,暂称为a吧),然后在实现或者继承了父接口或者父类的子类(暂称为b)中针对的是父类或者父接口中的接口进行编程,最后在测试类或者是具体功能类中只需实例化a后赋给针对接口类型编程的地方,这样一来就可以实现具体算法与具体用户之间的独立和替换;


首先是父接口:

 
package com.jie.pattern;

public interface Duck {
	
	public IFly fly=null;  //这里两个都是接口类型
	public ICry cry=null;  //
	
    public void display();
}


接着是两个接口的定义:

 
package com.jie.pattern;

public interface IFly {
	
	public void fly();

}

 package com.jie.pattern;

public interface ICry {

	public void cry();
}

然后是实现了父接口的子类:

 package com.jie.pattern;

public class FlyDuck implements Duck{

	public IFly fly=null;
	
	public FlyDuck()
	{
	}
	
	public void setFly(IFly fly)
	{
		this.fly=fly;
	}
	
	public void fly()
	{
		fly.fly();
	}
	
	public void display()
	{
		System.out.println("Fly's duck...");
	}
}


然后是实现了接口的具体类:

 package com.jie.pattern;

public class FlyDuck implements Duck{

	public IFly fly=null;
	
	public FlyDuck()
	{
	}
	
	public void setFly(IFly fly)
	{
		this.fly=fly;
	}
	
	public void fly()
	{
		fly.fly();
	}
	
	public void display()
	{
		System.out.println("Fly's duck...");
	}
}


最后当然少不了一个测试类:

 
package com.jie.pattern;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	FlyDuck flyDuck=new FlyDuck();
	flyDuck.setFly(new SubFly());//这里可以用实现了接口的具体类的实例来进行替代;
	flyDuck.fly();
	}

}


   发表时间:2008-03-24  
看起来不错.
1 请登录后投票
   发表时间:2008-06-11  
我突然想到一个问题,如果不同算法要求输入的参数不一样,怎么办?
1 请登录后投票
   发表时间:2008-08-06  
这本书 我也正在看,但是太抽象,我花了两个小时看完,不知所云
0 请登录后投票
   发表时间:2008-08-12  
我看的是大话设计模式,比较好理解,那本翻译过来的我实在不敢恭维,太难理解。
适合自己才是最好的。

这个模式我在php里经常用,偷懒的时候经常这么干,把经常变动的提出来,放到一个方法里,然后继承重写,或放到一个对象里,每次传递过来。
0 请登录后投票
   发表时间:2008-08-18  
设计模式最好结合实际应用来看。
做了一个项目或者模块后,再来看看设计模式,这样比较好点
0 请登录后投票
   发表时间:2008-08-18  
colven 写道
这本书 我也正在看,但是太抽象,我花了两个小时看完,不知所云

哥们看书太快了吧   我瞎翻都翻了两个礼拜
我觉得这本书讲得够明白了
0 请登录后投票
   发表时间:2008-08-20  
我觉得每个人对封装、继承和多态的理解都有所不同,所以就产生了多种设计模式,
设计模式本身没有好坏之分,每个有一定编程经验的人都可以自己写设计模式,而
光靠一种设计模式往往是不能解决实际问题的,评论设计模式的好坏没有任何意义,
关键是看是否能解决或最接近的解决实际问题!
0 请登录后投票
   发表时间:2008-08-20  
SubFly
这个类在哪里?

根本连代码都写错。还谈什么收获?
0 请登录后投票
   发表时间:2008-08-20  
感觉设计模式几乎都是利用类的继承,用顶层类实现参数或变量的透明。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics