抽象工厂模式:
在上一篇中讲到通过各个具体球类(如:足球,篮球等)来继承总球类(Ball),来实现通过BallFactory对具体球类的生产.
不过,当时只是能造出不同球类,而在每种球类中肯定也有颜色,大小等不同的属性.所以,为了实现在工厂中添加属性.将抽象的Ball球类,修改成Bll接口,在该接口中添加所需要的方法:
这种模式是抽象工厂模式,抽象工厂模式是抽象方法模式的升级.在有多个业务品种,业务分级时,采用抽象工厂模式生产需要的对象是一种非常好的解决房还是.(比如,在生产球类的时候,不仅要分球的种类,也要分球的颜色等....)
即:
1 //球接口 2 public interface Ball { 3 4 void getBallKind(); 5 6 void getBallColor(); 7 }
然后让之前具体球类实现该Ball这个接口
1 //篮球实现Ball 2 public abstract class Basketball implements Ball{ 3 public void getBallKind(){ 4 System.out.println("我是篮球!!!"); 5 } 6 } 7 8 9 //足球实现Ball 10 public abstract class Football { 11 public void getBallKind(){ 12 System.out.println("我是足球!!!"); 13 } 14 }
这样,就能对球的种类进行不同的生产了.接下来就是给同种球类涂上不同的颜料了.
1 //给篮球涂色 2 public class BlackBasketball extends Basketball{ 3 4 public void getBallColor() { 5 System.out.println("我是黑色篮球"); 6 } 7 8 } 9 10 public class RedBasketball extends Basketball{ 11 12 public void getBallColor() { 13 System.out.println("我是红色篮球"); 14 } 15 16 } 17 18 //给足球涂色 19 public class BlackFootball extends Football{ 20 21 public void getBallColor() { 22 System.out.println("我是黑色足球!!!"); 23 } 24 } 25 26 public class RedFootball extends Football{ 27 28 public void getBallColor() { 29 System.out.println("我是红色足球!!!"); 30 } 31 }
每个品种的球类定义好了,然后就是定义生产各个球类的工厂了.
1 //红球工厂类 2 public class RedBallFactory implements BallFactory{ 3 4 public Ball createBasketball() { 5 return new RedBasketball(); 6 } 7 8 public Ball createFootBall() { 9 return new RedFootball(); 10 } 11 } 12 //黑球工厂类 13 public class BlackFactory implements BallFactory{ 14 15 public Ball createBasketball() { 16 return new BlackBasketball(); 17 } 18 19 public Ball createFootBall() { 20 return new BlackFootball(); 21 } 22 }
抽象工厂模式的扩展性一般。