参考实例:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
===================
工厂 其实就是抽象出事物的共性或者相似之处,定义共同的接口,实现交给具体的子类处理的过程。
理解 产品族和等级的概念:
1.抽象工厂:定义工厂接口,包含生产原味和草莓味的酸奶的方法;
2.定义工厂的实现类:蒙牛工厂和伊利工厂,并实现接口的方法;
3.抽象工厂:定义口味接口,包含原味接口和草莓味接口,每个接口包含该口味酸奶的价格的方法;
4.定义口味接口的实现类:每个工厂都能生产原味和草莓味酸奶,因此每个工厂分别包含原味接口的实现类和草莓味接口的实现类,实现类中给出该口味酸奶的价格。
5.顾客类:顾客购买酸奶,只要说明要买酸奶的厂家,既得到该厂家下不同口味酸奶的价格信息;
代码如下:
定义 草莓味接口:
package iv.factory.feidanyi.yuanshi.interfaces;
public interface CaoMeiWei {
void getPrice();
}
定义草莓味的实现类:蒙牛草莓味
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.CaoMeiWei;
public class MengNiuCmw implements CaoMeiWei {
private int price =0;
public MengNiuCmw(int price){
this.price = price;
}
public void getPrice() {
// TODO Auto-generated method stub
System.out.println("蒙牛草莓味价格:"+this.price);
}
}
定义草莓味的实现类:伊利草莓味
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.CaoMeiWei;
public class YiLiCmw implements CaoMeiWei {
private int price =0;
public YiLiCmw(int price){
this.price = price;
}
public void getPrice() {
// TODO Auto-generated method stub
System.out.println("伊利草莓味价格:"+this.price);
}
}
定义原味接口:
package iv.factory.feidanyi.yuanshi.interfaces;
public interface YuanWei {
void getPrice();
}
定义原味接口的实现类:蒙牛原味:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.YuanWei;
public class MengNiuYw implements YuanWei{
private short price =0;
private String brand ="";
public MengNiuYw(int price){
this.price = (short) price;
}
public void getPrice() {
// TODO Auto-generated method stub
System.out.println("原味价格:"+this.price);
}
public void getBrand() {
// TODO Auto-generated method stub
System.out.println("品牌:"+this.brand);
}
}
定义原味接口的实现类:伊利原味:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.YuanWei;
public class YiLiYw implements YuanWei{
private int price =0;
private String brand = "";
public YiLiYw(int price){
this.price = price;
}
public void getPrice() {
// TODO Auto-generated method stub
System.out.println("原味价格:"+this.price);
}
}
定义厂家的接口:
package iv.factory.feidanyi.yuanshi.interfaces;
public interface AbstractFactory {
YuanWei createYuanWei();
CaoMeiWei createCaoMeiWei();
}
定义厂家的接口的实现类:蒙牛厂家:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractBrandFactory;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractFactory;
import iv.factory.feidanyi.yuanshi.interfaces.CaoMeiWei;
import iv.factory.feidanyi.yuanshi.interfaces.YuanWei;
public class MengNiuFactory implements AbstractFactory,AbstractBrandFactory {
public CaoMeiWei createCaoMeiWei() {
// TODO Auto-generated method stub
return new MengNiuCmw(14);
}
public YuanWei createYuanWei() {
// TODO Auto-generated method stub
return new MengNiuYw(15);
}
public String getBrand() {
// TODO Auto-generated method stub
return new MengNiu().getBrand();
}
}
定义厂家的接口的实现类:伊利厂家:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractBrandFactory;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractFactory;
import iv.factory.feidanyi.yuanshi.interfaces.CaoMeiWei;
import iv.factory.feidanyi.yuanshi.interfaces.YuanWei;
public class YiLiFactory implements AbstractFactory,AbstractBrandFactory {
public CaoMeiWei createCaoMeiWei() {
// TODO Auto-generated method stub
return new YiLiCmw(11);
}
public YuanWei createYuanWei() {
// TODO Auto-generated method stub
return new YiLiYw(12);
}
public String getBrand() {
// TODO Auto-generated method stub
return new YiLi().getBrand();
}
}
定义顾客类:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractFactory;
import iv.factory.feidanyi.yuanshi.interfaces.CaoMeiWei;
import iv.factory.feidanyi.yuanshi.interfaces.YuanWei;
public class Customer {
private YuanWei yw =null;
private CaoMeiWei cmw = null;
public void buyMilk(AbstractFactory af){
yw = af.createYuanWei();
cmw = af.createCaoMeiWei();
yw.getPrice();
cmw.getPrice();
}
}
定义main方法类:
package iv.factory.feidanyi.yuanshi.classes;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractBrandFactory;
import iv.factory.feidanyi.yuanshi.interfaces.AbstractFactory;
public class client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Customer cus = new Customer();
AbstractBrandFactory af0 = new MengNiuFactory();
AbstractFactory af = new MengNiuFactory();
System.out.println(af0.getBrand());
cus.buyMilk(af);
AbstractBrandFactory af11 = new YiLiFactory();
AbstractFactory af1 = new YiLiFactory();
System.out.println(af11.getBrand());
cus.buyMilk(af1);
}
}
完毕。
动态装载类:
Class.forName(String类型的类的包路径).newInstance();
原文:http://blog.csdn.net/lbake/article/details/46439163