`
wlh269
  • 浏览: 445442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抽象工厂模式AbstractFactory

阅读更多
什么情况下使用抽象工厂模式?
  a).一个系统不应该依赖于产品类的实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的;
   b).这个系统的产品有多于一个产品族,而系统只消费其中某一族的产品;(这是抽象工厂模式的原始用意,某一族的产品就类似于下面例子中,北方的产品属于一个产品族,热带的产品属于一个产品族
   c).系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现;


水果接口
package com.wlh.AbstractFactory;
/**
 * 水果
 * @author Administrator
 *
 */
public interface Fruit {

}





蔬菜接口
package com.wlh.AbstractFactory;
/**
 * 蔬菜
 * @author Administrator
 *
 */
public interface Viggie {

}



园丁接口(也就是工厂)
package com.wlh.AbstractFactory;
/**
*园丁(也就是工厂)
*/
public interface Gardener {

	public Fruit createFruit();
	public Viggie createViggie();
}



北方水果
package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;

public class NorthFruit implements Fruit {

	private String name;
	public NorthFruit (String name){
		this.name=name;
		System.out.println("生产出:...."+this.name);
	}
}



北方蔬菜
package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Viggie;

public class NorthViggie implements Viggie {

	private String name;
	public NorthViggie(String name) {
		this.name=name;
		System.out.println("生产出:...."+this.name);
	}

}




热带水果:
package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;

public class TropicalFruit implements Fruit {
	
	private String name;
	public TropicalFruit(String name){
		this.name=name;
		System.out.println("生产出:...."+this.name);
	}

}



热带蔬菜

package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Viggie;

public class TropicalViggie implements Viggie {

	private String name;
	public TropicalViggie(String name){
	  this.name=name;
	  System.out.println("生产出:...."+this.name);
	}
	
}



北方园丁(北方工厂)只负责生产北方产品

package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;

public class NorthGardener implements Gardener {

	/**
	 * 种植北方水果
	 */
	 public Fruit createFruit(){
		 return new NorthFruit("北方水果");
	 }
	 /**
	  * 种植北方蔬菜
	  */
	 public Viggie createViggie(){
		 return new NorthViggie("北方蔬菜");
	 }
	 
}



热带园丁(热带工厂)只负责生产热带产品


package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;

public class TropicalGardener implements Gardener{
	
	/**
	 * 种植热带水果
	 */
	public Fruit createFruit(){
		return new TropicalFruit("热带水果") ;
		
	}
	
	/**
	 * 种植热带蔬菜
	 */
	public Viggie createViggie(){
		return new TropicalViggie("热带蔬菜");
	}
}



客户端调用
package com.wlh.AbstractFactory.test;

import com.wlh.AbstractFactory.impl.NorthGardener;
import com.wlh.AbstractFactory.impl.TropicalGardener;

public class CreatTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new TropicalGardener().createFruit();
		new TropicalGardener().createViggie();
		new NorthGardener().createFruit();
		new NorthGardener().createViggie();

	}

}




输出:
生产出:....热带水果
生产出:....热带蔬菜
生产出:....北方水果
生产出:....北方蔬菜

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics