Java的工厂模式(三)
除了一般的工厂模式之外,还有抽象工厂模式,抽象工厂模式更强调产品族的概念,一个具体工厂生产出来的系列商品都是一个产品族的。
假设我们有两个具体工厂,分别是袋装水果工厂和罐装水果工厂,它们都能生产苹果和香蕉,这样生产出来的水果就会有四种,其中罐装工厂生产出的罐装水果和香蕉都属于一个产品族。要完成我们所说的代码要一步一步建立我们的工厂和产品。
首先我们要建立两个接口,再建立四个产品类分别各自继承其接口。
/** * @author mugglean * * */ //苹果接口 public interface Apple { public void produce(); } //香蕉接口 public interface Banana { public void produce(); } //袋装苹果类 public class BagApple implements Apple { @Override public void produce() { // TODO Auto-generated method stub System.out.println("-------生产了一个袋装苹果-------"); } } //罐装苹果类 public class CannedApple implements Apple { @Override public void produce() { // TODO Auto-generated method stub System.out.println("-------生产了一个罐头苹果-------"); } } //袋装香蕉类 public class BagBanana implements Banana { @Override public void produce() { // TODO Auto-generated method stub System.out.println("-------生产了一个袋装香蕉-------"); } } //罐装香蕉类 public class CannedBanana implements Banana { @Override public void produce() { // TODO Auto-generated method stub System.out.println("-------生产了一个罐头香蕉-------"); } }
然后我们再建一个抽象工厂和两个实体工厂,就是我们的罐头工厂和袋装工厂。
//工厂接口 public interface FruitFactory { //生产香蕉 public Banana getBanana(); //生产苹果 public Apple getApple(); } //罐头工厂 public class CannedFactory implements FruitFactory { @Override public Banana getBanana() { // TODO Auto-generated method stub return new CannedBanana(); } @Override public Apple getApple() { // TODO Auto-generated method stub return new CannedApple(); } } //袋装工厂 public class BagFactory implements FruitFactory { @Override public Banana getBanana() { // TODO Auto-generated method stub return new BagBanana(); } @Override public Apple getApple() { // TODO Auto-generated method stub return new BagApple(); } }
这样我们的所有类都建立好了,再建一个测试进程。
public class TestDrive { public static void main(String[] args) { // TODO Auto-generated method stub FruitFactory factoryone=new BagFactory(); Banana myBanana=factoryone.getBanana(); myBanana.produce(); FruitFactory factorytwo=new CannedFactory(); Apple myApple=factorytwo.getApple(); myApple.produce(); } }
运行结果如下:
-------生产了一个袋装香蕉-------
-------生产了一个罐头苹果-------
成功实现了工厂模式,这样两个工厂模式就讲解完毕了,工厂模式在JDBC和Spring中都有很好的运用,是一个很基础的设计模式。