- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
复合享元模式:将一些单纯享元使用组合模式加以组合,可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 * 复合享元模式:将一些单纯享元使用组合模式加以组合,可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享 * 享元工厂角色与单例模式 ? ????客户端要引用享元对象,是通过工厂对象创建或者获得的,客户端每次引用一个享元对象,都是可以通过同一个工厂对象来引用所需要的享元对象。 因此,可以将享元工厂设计成单例模式,这样就可以保证客户端只引用一个工厂实例。因为所有的享元对象都是由一个工厂对象统一管理的,所以在客户端没有必要 引用多个工厂对象。 ????不管是单纯享元模式还是复合享元模式中的享元工厂角色,都可以设计成为单例模式,对于结果是不会有任何影响的。 ↑ 复合享元模式与合成模式 ? ????在复合享元模式的分析中也已经提到过,复合享元模式实际上是单纯享元模式与合成模式的组合。单纯享元对象可以作为树叶对象来讲,是可以共享 的,而复合享元对象可以作为树枝对象,因此在复合享元角色中可以添加聚集管理方法,在图中的add()方法即为一个聚集管理方法。 * import java.util.Map;import java.util.HashMap;import java.util.Iterator; * import java.util.Map;import java.util.HashMap;import java.util.Iterator; * import java.util.Map;import java.util.HashMap;import java.util.Iterator; * import java.util.Map;import java.util.HashMap;import java.util.Iterator; * 程序12-47? 连接池实例ConnectionPool.java package structure.flyweight; import java.sql.Connection; import java.sql.SQLException; import java.util.Vector; /** ?* @author liuzhongbing ?* 享元模式—连接池实例 ?*/ public class ConnectionPool { ??? private VectorConnection pool; ??? private String url = jdbc:mysql://localhost:3306/test; ??? private String username = root; ??? private String password = ; ??? private String driverClassName = com.mysql.jdbc.Driver; ??? /** ???? * 连接池的大小,也就是连接池中有多少个数据库连接 ???? */ ??? private int poolSize = 100; ??? private static ConnectionPool instance = null; ??? /** ???? * 私有的构造方法,禁止外部创建本类的对象,要想获得本类的对象,通过codegetIstance/code方法 ???? * 使用了设计模式中的单子模式 ???? */ ??? private ConnectionPool() { ??????? pool = new VectorConnection(poolSize); ??????? // 在连接池中创建初始设置的数据库连接 ??????? Connection conn = null; ??????? for (int i = 0; i poolSize; i++) { ??????????? try { ??????????????? Class.forName(driverClassName); ??????????????? conn = java.sql.DriverManager.getConnection(url, username, password); ??????????????? pool.add(conn); ??????????? } catch (ClassNotFoundException e) { ??????????????? e.printStackTrace(); ??????????? } catch (SQLException
文档评论(0)