工厂方法模式

介绍工厂方法模式之前先需要知道简单工厂模式,简单工厂模式是类的创建模式,又叫静态工厂方法模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类:

 1 //抽象产品接口
 2 interface Product{
 3     public void method();
 4 }
 5 
 6 //具体产品类
 7 class ProductA implements Product{
 8     
 9     @Override
10     public void method() {
11         //业务代码
12     }
13     
14 }
15 
16 class ProductB implements Product{
17 
18     @Override
19     public void method() {
20         //业务代码
21     }
22     
23 }
24 
25 class Factory{
26     
27     public Product getProduct(String type){
28         if("A".equals(type))
29             return new ProductA();
30         else if("B".equals(type))
31             return new ProductB();
32         else
33             return null;
34     }
35 }

工厂方法模式是简单工厂的拓展形式,将工厂类也进行抽象化,由具体的实现了工厂接口的具体的工厂类创建对象:

 1 //抽象产品类
 2 interface File{
 3     public void method();
 4 }
 5 
 6 //具体产品类
 7 class HTMLFileA implements File{
 8 
 9     @Override
10     public void method() {
11         //业务代码
12     }
13     
14 }
15 
16 class HTMLFileB implements File{
17 
18     @Override
19     public void method() {
20         //业务代码
21     }
22     
23 }
24 
25 class XMLFileA implements File{
26 
27     @Override
28     public void method() {
29         //业务代码
30     }
31     
32 }
33 
34 class XMLFileB implements File{
35 
36     @Override
37     public void method() {
38         //业务代码
39     }
40     
41 }
42 
43 //抽象工厂接口
44 interface Factory{
45     public File getFile(String type);
46 }
47 
48 //具体工厂类
49 class HTMLFactory implements Factory{
50 
51     @Override
52     public File getFile(String type) {
53         if("A".equals(type))
54             return new HTMLFileA();
55         else if("B".equals(type))
56             return new HTMLFileB();
57         else
58             return null;
59     }
60     
61 }
62 
63 class XMLFactory implements Factory{
64 
65     @Override
66     public File getFile(String type) {
67         if("A".equals(type))
68             return new XMLFileA();
69         else if("B".equals(type))
70             return new XMLFileB();
71         else
72             return null;
73     }
74     
75 }
原文地址:https://www.cnblogs.com/gsbm/p/4771853.html