`
pan_java
  • 浏览: 286188 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hand first 设计模式 - 抽象工厂模式

阅读更多
抽象工厂模式定义提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类.


零件工厂接口
public interface PartFactory {
	
	public Window createWindow();
	
	public Glass createGlass();

}


零件接口类,让对象更加抽象化
public interface Product {
	public String name();
}



零件-窗
public interface Window extends Product {

}


零件-玻璃
public interface Glass extends Product{

}



A工厂生产的玻璃
public class AGlass implements Glass {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return "it is a factory glass";
	}

}


A工厂生产的窗
public class AWindow implements Window {
	
	public String name(){
		return "it is a factory window";
	}
	
}


B工厂生产的玻璃


public class BGlass implements Glass {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return "it is b factory glass";
	}

}


B工厂生产的窗
public class BWindow implements Window {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return "it is b factory window";
	}

}


A工厂

public class APartFactory implements PartFactory {

	@Override
	public Glass createGlass() {
		// TODO Auto-generated method stub
		return new AGlass();
	}

	@Override
	public Window createWindow() {
		// TODO Auto-generated method stub
		return new AWindow();
	}

}



B工厂
public class BPartFactory implements PartFactory {

	@Override
	public Glass createGlass() {
		// TODO Auto-generated method stub
		return new BGlass();
	}

	@Override
	public Window createWindow() {
		// TODO Auto-generated method stub
		return new BWindow();
	}

}



房子
public class House {
	
	private Window window;
	
	private Glass glass;
	
	public House(Window window,Glass glass){
		this.glass = glass;
		this.window = window;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return window.name()+" / "+ glass.name();
	}
	
	

}


测试类
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PartFactory aFactory = new APartFactory();
		
		PartFactory bFactory = new BPartFactory();
		//A工厂零件房子
		House ahouse = new House(aFactory.createWindow(),aFactory.createGlass());
		//B工厂零件房子
		House bhouse = new House(bFactory.createWindow(),bFactory.createGlass());
		
		System.out.println(ahouse);
		
		System.out.println(bhouse);

	}

}


设计原则
   依赖抽象,不要依赖具体的抽象.








分享到:
评论
6 楼 pan_java 2009-06-25  
donald 写道
有没有实际的应用?就是指实际这个工厂模式的项目应该,这些基础的确在网上一搜索都是,现在我想找个项目应用的抽象工厂。


我想只要是你理解了这个模式,自己写一个也不会有多大的问题.
5 楼 donald 2009-06-25  
有没有实际的应用?就是指实际这个工厂模式的项目应该,这些基础的确在网上一搜索都是,现在我想找个项目应用的抽象工厂。
4 楼 pan_java 2009-06-24  
fansofjava 写道
这种例子网上多的是,
而且全是代码,一点心得与体会都没有,刷积分也要刷得有技术含量一点嘛?


这些代码是我看书以后写的,我相信再多的文字说明也没有实例来的快.对新手来可能有点不了解真的含义.但是对老手则是对这个模式的回顾与恐固.

写这个文章主要是自己备忘,发布到论坛是让大家一起回顾.

这位仁兄,做人要厚道.难道我为了10分,粘贴复制花掉十分钟.再说这些代码都是我自己写的.不是从网上转过来的.

文章写的不好是别外一回事,不好我接受砖头.
3 楼 fansofjava 2009-06-24  
这种例子网上多的是,
而且全是代码,一点心得与体会都没有,刷积分也要刷得有技术含量一点嘛?
2 楼 pan_java 2009-06-24  
linsongbin1 写道
挺好的例子,可以用来做入门的例子。讲给新手听听。


是啊,第二遍看这本书了收获很大,第一遍了解,第二遍理解.
1 楼 linsongbin1 2009-06-24  
挺好的例子,可以用来做入门的例子。讲给新手听听。

相关推荐

Global site tag (gtag.js) - Google Analytics