23种设计模式----------抽象工厂模式

抽象工厂模式:

在上一篇中讲到通过各个具体球类(如:足球,篮球等)来继承总球类(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 }

抽象工厂模式的扩展性一般。

原文地址:https://www.cnblogs.com/yemaozistar/p/4140366.html