抽象工厂模式

一、什么是抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
二、模式中包含的角色及其职责
1.抽象工厂(Creator)角色 (FruitFactory.java) 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

2.具体工厂( Concrete Creator)角色(WenshiFruitFactory.java, SouthFruitFactory.java, NorthFruitFactory.java) 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

3.抽象(Product)角色 (Fruit.java) 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

4.具体产品(Concrete Product)角色(NorthApple.java, NorthBanana.java, WenshiBanana.java等等) 抽象模式所创建的具体实例对象

[java]  view plain copy
  1. Fruit.java  
  2. public interface Fruit {   
  3.     /*  
  4.      * 采集  
  5.      */   
  6.     public void get();   
  7. }  
  8.   
  9. Apple.java  
  10. public abstract class Apple implements Fruit{   
  11.     /*  
  12.      * 采集  
  13.      */   
  14.     public abstract void get();   
  15. }  
  16.   
  17. SouthApple.java  
  18. public class SouthApple extends Apple {   
  19.        
  20.     @Override   
  21.     public void get() {   
  22.         System.out.println("采集南方苹果");   
  23.     }   
  24.    
  25. }  
  26.   
  27. NorthApple.java  
  28. public class NorthApple extends Apple {   
  29.        
  30.     @Override   
  31.     public void get() {   
  32.         System.out.println("采集北方苹果");   
  33.     }   
  34.    
  35. }  
  36.   
  37. WenshiApple.java  
  38. public class WenshiApple extends Apple {   
  39.        
  40.     @Override   
  41.     public void get() {   
  42.         System.out.println("采集温室苹果");   
  43.     }   
  44.    
  45. }  
  46.   
  47. Banana.java  
  48. public abstract class Banana implements Fruit{   
  49.     /*  
  50.      * 采集  
  51.      */   
  52.     public abstract void get();   
  53. }  
  54.   
  55. NorthBanana.java  
  56. public class NorthBanana extends Banana {   
  57.        
  58.     @Override   
  59.     public void get() {   
  60.         System.out.println("采集北方香蕉");   
  61.     }   
  62.    
  63. }  
  64.   
  65. SouthBanana.java  
  66. public class SouthBanana extends Banana {   
  67.        
  68.     @Override   
  69.     public void get() {   
  70.         System.out.println("采集南方香蕉");   
  71.     }   
  72.    
  73. }  
  74.   
  75. WenshiBanana.java  
  76. public class WenshiBanana extends Banana {   
  77.        
  78.     @Override   
  79.     public void get() {   
  80.         System.out.println("采集温室香蕉");   
  81.     }   
  82.    
  83. }  
  84.   
  85. FruitFactory.java  
  86. public interface FruitFactory {   
  87.     //实例化Apple   
  88.     public Fruit getApple();   
  89.     //实例化Banana   
  90.     public Fruit getBanana();   
  91. }  
  92.   
  93. NorthFruitFactory.java  
  94. public class NorthFruitFactory implements FruitFactory {   
  95.        
  96.     public Fruit getApple() {   
  97.         return new NorthApple();   
  98.     }   
  99.    
  100.     public Fruit getBanana() {   
  101.         return new NorthBanana();   
  102.     }   
  103.    
  104. }  
  105.   
  106. SouthFruitFactory.java  
  107. public class SouthFruitFactory implements FruitFactory {   
  108.        
  109.     public Fruit getApple() {   
  110.         return new SouthApple();   
  111.     }   
  112.    
  113.     public Fruit getBanana() {   
  114.         return new SouthBanana();   
  115.     }   
  116.    
  117. }  
  118.   
  119. WenshiFruitFactory.java  
  120. public class WenshiFruitFactory implements FruitFactory {   
  121.        
  122.     public Fruit getApple() {   
  123.         return new WenshiApple();   
  124.     }   
  125.    
  126.     public Fruit getBanana() {   
  127.         return new WenshiBanana();   
  128.     }   
  129.    
  130. }  
  131.   
  132. MainClass.java  
  133. public class MainClass {   
  134.     public static void main(String[] args) {   
  135.         FruitFactory ff = new NorthFruitFactory();   
  136.         Fruit apple = ff.getApple();   
  137.         apple.get();   
  138.    
  139.         Fruit banana = ff.getBanana();   
  140.         banana.get();   
  141.    
  142.         FruitFactory ff2= new SouthFruitFactory();   
  143.         Fruit apple2 = ff2.getApple();   
  144.         apple2.get();   
  145.    
  146.         Fruit banana2 = ff2.getBanana();   
  147.         banana2.get();   
  148.    
  149.         FruitFactory ff3 = new WenshiFruitFactory();   
  150.         Fruit apple3 = ff3.getApple();   
  151.         apple3.get();   
  152.    
  153.         Fruit banana3 = ff3.getBanana();   
  154.         banana3.get();   
  155.     }   
  156. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值