两全其美网校城

 找回密码
 注册
两全其美网校城 首页 IT网校 查看内容

Factory模式的优点

2015-6-3 14:44| 发布者: ashouyi| 查看: 59| 评论: 0

摘要:   Factory模式的优点   对于构造函数来讲, 其名字必须和所属的类名一致. 这就往往失去了利用函数名传递更多信息的机会. 比如说我们有一个创建XML Parser 类:   1 public class XMLConverter() inmplements Con ...

  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 模式所具有的而构造函数所不所具有的两个优点,大家可在实践中加以运用。


鲜花

握手

雷人

鸡蛋

路过

相关分类

下级分类

Baidu
中华会计网校 新东方网络课堂 中华会计网校会计继续教育 新东方网校 环球网校 中公网校

小黑屋|手机版|关于我们|两全其美网校城 ( 京ICP备05068258-34 )

GMT+8, 2024-5-11 01:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部