论坛首页 Java企业应用论坛

工厂模式

浏览 4175 次
锁定老帖子 主题:工厂模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-10   最后修改:2012-08-10
工厂模式:“工厂”生活中是生产东西的地方,在Java世界里工厂是生产对象实例的。
工厂的作用:使代码与实现类分离,这样方便我们替换实现。
工厂的动作:选择实现——根据条件提供对应的对象实例。

这几天学习了下《Thinking in Java》中“接口”这个章节。觉得该章中关于工厂的设计例子蛮有意思的,参照它写了如下一个例子:
public interface Cycle {
	public void run();
}

public class UniCycle implements Cycle {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("Cycle Run");
	}

}

public class BiCycle implements Cycle {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("BiCycle Run");
	}

}

public class TriCycle implements Cycle {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("TriCycle Run");
	}

}

下面是工厂:
public interface CycleFactory {
	public Cycle getCycle();
}

public class UniCycleFactory implements CycleFactory {

	@Override
	public Cycle getCycle() {
		// TODO Auto-generated method stub
		return new UniCycle();
	}

}

public class BiCycleFactory implements CycleFactory {

	@Override
	public Cycle getCycle() {
		// TODO Auto-generated method stub
		return new BiCycle();
	}

}

public class TriCycleFactory implements CycleFactory {

	@Override
	public Cycle getCycle() {
		// TODO Auto-generated method stub
		return new TriCycle();
	}

}

测试代码:
public class FactoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		run(new UniCycleFactory().getCycle());
		run(new BiCycleFactory().getCycle());
		run(new TriCycleFactory().getCycle());
		
		run(new UniCycleFactory());
		run(new BiCycleFactory());
		run(new TriCycleFactory());
	}
	
	public static void run(Cycle cycle){
		cycle.run();
	}
	
	public static void run(CycleFactory cycleFactory){
		Cycle cycle = cycleFactory.getCycle();
		cycle.run();
	}

}

运行结果:
Cycle Run
BiCycle Run
TriCycle Run
Cycle Run
BiCycle Run
TriCycle Run


感觉这样设计工厂有点做作,可能为了强调“接口”吧 
   发表时间:2012-08-11  
表示没看出有什么好处
0 请登录后投票
   发表时间:2012-08-20  
看工厂模式的时候也是有这种感觉,貌似没啥意义的感觉,但看实际项目代码,貌似这样写会比较清晰些,而且每个工厂类实现的东西没那么简单
0 请登录后投票
   发表时间:2012-08-27  
书上的就是个简单例子啊!
0 请登录后投票
   发表时间:2012-10-15  
工厂类中可以写一个switch-case循环,根据传过来参数的不同从而返回具体的实现类
0 请登录后投票
论坛首页 Java企业应用版

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