作业帮 > JAVA > 教育资讯

JAVA教程:Factory模式的优点

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 14:32:53 JAVA
JAVA教程:Factory模式的优点
JAVA教程:Factory模式的优点JAVA
【51Test.NET-JAVA教程:Factory模式的优点】:

         望文生义

  对于构造函数来讲, 其名字必须和所属的类名一致. 这就往往失去了利用函数名传递更多信息的机会. 比如说我们有一个创建XML Parser 类:

1 public class XMLConverter() inmplements Converter {
2 
3   //创建一个缺省的 converter, Idoc Converter
4 
5   public XMLConverter () {
6 
7   …………………………….
8 
9   }
10 
11   //创建一个指定的 xml parser, idoc/bapi
12 
13   public XMLConverter (String xmlConverterType) {
14 
15   ………………….
16 
17   }
18 
19   }
20 
21

  这个XMLConverter类有两个构造函数, 第一个构造函数创建一个缺省的XML converter.第二个构造函数可根据程序员的指定来创建一个 XML conveter.为了使用这个类,我们必须先读API文档,并且我们可能很难记住这两个构造函数各自的用途. 我们下面看看如何使用Factory解决这个问题:

1 public class XMLConverter () {
2 
3   public Converter getIdocConverter() {
4 
5   return new XML();
6 
7   }
8 
9   public static Converter getBapiConverter() {
10 
11   return new XMLConverter ("bapi");
12 
13   }
14 
15   //创建一个缺省的 converter, Idoc Converter
16 
17   private static Converter XMLConverter () {
18 
19   …………………………….
20 
21   }
22 
23   //创建一个指定的 xml parser, idoc/bapi
24 
25   private XMLConverter (String xmlParserType) {
26 
27   ………………….
28 
29   }
30 
31   }
32 
33

  这个新的XMLConverter类有着两个get函数, 它们返回两个XMLConverter型的Object. 这就是典型的Factory 模式. 这两个get函数的名字清楚地告诉了我们它们各自的用途,我们不必查API文档就能明白它们的用途.请特别注意,两个构造函数都被标明为pivate.

  可控制在一个JVM所能产生某类型Object的个数

  大家知道生成一个数据库的Connection object 是一个非常影响程序速度的操作,所以"连接池'(connection pooling)是一个很常使用的技巧: 程序维持一定数量的Connection object, 以便不断的重用.这样一来就大大减少了产生和销毁Connection object所需的时间.这就要求我们能够控制最多可产生个Connection object. 下面我们看看如和用Factory 模式来解决这个问题:

1   import java.sql.*;
2 
3   import java.util.*;
4 
5   pulbic class ConnectionPool {
6 
7   private static final int NUM_OF_CONNECTION = 50;
8 
9   private static int counter = 0;
10 
11   private Vector connectionPool = new Vector();
12 
13   private ConnectionPool(){
14 
15   }
16 
17   public static Connection getConnection() throws Exception{
18 
19   Connection connection = null;
20 
21   if (connectionPool.size() < NUM_OF_CONNECTION) {
22 
23   connection = Class.forName("my.sql.Driver").
24 
25   getConnection("dbc:oracle:thin:@192.168.100.36:1521:ora9i");
26 
27   connectionPool.add(connection);
28 
29   } else {
30 
31   if(conuter < NUM_OF_CONNECTION)
32 
33   counter++;
34 
35   else counter = 0;
36 
37   connection = (Connection)connectionPool.elementAT(counter%
38 
39   NUM_OF_CONNECTION );
40 
41   }
42 
43   return connection;
44 
45   }
46 
47   }
48

  上面这一小段程序展示了如何利用Factory 模式保持50个Connection Object:当Connection的数量小于指定数时,我们就不断创建Connection,直到50个Connection Object 被创建。 在这之后,我们就不断的重用这些Object。

  以上笔者通过事例阐述了Factory 模式所具有的而构造函数所不所具有的两个优点,大家可在实践中加以运用。


JAVA