`
默默的小熊
  • 浏览: 232920 次
社区版块
存档分类
最新评论

Java工厂模式

 
阅读更多

    工厂模式不仅要求有一个能够创建新对象的方法,还要求能够是客户代码无需了解应该具体实例化哪个类。具体说有三个特征:

    1. 该方法创建一个新对象;

    2. 该方法的返回类型为一个抽象类或接口;

    3. 有若干个类实现了上述接口;

    我们来看下数据库连接中使用的工厂模式的例子,由于数据库连接可能使用JDBC也可能是数据源的方式获取一个数据库连接,好吧,我们设计一个连接接口,把数据库连接的细节隐藏起来。

 

public interface BuildConnection {
	Connection getConnection() throws SQLException;
}

 

 

public class TestFactory {
	private BuildConnection con;

	public TestFactory(String driver, String url, String userid, String password)
			throws ClassNotFoundException {
		con = new DriverManagerConnection(driver, url, userid, password);

	}

	public TestFactory(String factory, String lookupURL, String lookupName)
			throws ClassNotFoundException {
		con = new DataSourceConnection(factory, lookupURL, lookupName);

	}

	public BuildConnection getConnection() {
		return con;
	}

    上面已经搞好工厂了,只要传递进去变量,就可以返回BuildConnection对象了。

 

public class DriverManagerConnection implements BuildConnection {
	static private Set<String> set = new HashSet<String>();
	private String driver;
	private String url;
	private String userid;
	private String password;
		
	public DriverManagerConnection(String newDriver, String newUrl, String newUserid, String newPassword) throws ClassNotFoundException {
		// save the input parameters
		driver = newDriver;
		url = newUrl;
		userid = newUserid;
		password = newPassword;
		
		// load the driver
		loadDriver();
	}
		
	private void loadDriver() throws ClassNotFoundException {
		if (!set.contains(driver)) {
			Class.forName(driver); // load the driver
			set.add(driver);	   // add it to the collection	
		}
	}

	public Connection getConnection() throws SQLException {
		return DriverManager.getConnection(url, userid, password);
	}		
}
 
public class DataSourceConnection implements BuildConnection {
	private String factory;
	private String lookupURL;
	private String lookupName;
	private Context context;
	private DataSource dataSource;
	
	public DataSourceConnection(String newFactory, String newLookupURL,  String newLookupName) {
		factory = newFactory;
		lookupURL = newLookupURL;
		lookupName = newLookupName;
	}

	private DataSource getDataSource() throws NamingException {
		if (dataSource == null) {
			Context context = getContext();
			dataSource = (DataSource) context.lookup(lookupName);
		}
		return dataSource;
	}

	private Context getContext() throws NamingException {
		if (context == null) {
			Hashtable<String, String> env = new Hashtable<String, String>(5);
			env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
			env.put(Context.PROVIDER_URL,lookupURL);
//			env.put("java.naming.factory.initial", factory);
//			env.put("java.naming.provider.url",lookupURL);

			context = new InitialContext(env);
		}
		return context; 
	}

	public Connection getConnection() throws SQLException {
		Connection connection = null;
		try {
			connection = getDataSource().getConnection();
		} catch (NamingException ne) {
			throw new SQLException("DataSource Unavailable");
		}
		return connection;
	}

}

    对于用户来说,用户只要了解有TestFactory和BuildConnection类就可以了,不需要了解实现BuildConnection接口的各种类。

 

 

 

分享到:
评论

相关推荐

    java工厂模式试学教程(视频)

    java工厂模式试学教程(视频) java工厂模式试学教程(视频)

    java三种工厂模式文档+三个实例.rar

    Java工厂模式是面向对象设计模式中的一个重要概念,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不直接实例化具体类,而是通过一个接口或者抽象类来间接创建。这种模式的核心在于将对象的创建过程...

    java工厂模式java工厂模式.doc

    Java 工厂模式 Java 工厂模式是一种创建型设计模式,旨在提供一种统一的接口来创建对象。该模式主要有三种形式:简单工厂模式、工厂方法模式和抽象工厂模式。这些模式从上到下逐步抽象,并且更具一般性。 一、引子...

    java工厂模式2

    Java工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建对象时,我们不会对客户端暴露创建逻辑,而是引用一个共同的接口来指向新创建的对象。这种模式的主要优点是隔离...

    java工厂模式例子描述

    Java工厂模式是一种设计模式,主要用于解决对象创建的问题。在编程中,当系统无法预见需要创建哪种类型的实例,或者系统不应依赖于对象如何被创建、组合和表达的细节时,工厂模式是一个很好的选择。 简单工厂模式是...

    设计模式之java工厂模式

    "设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...

    java 工厂模式代码

    在软件设计模式中,工厂模式是一种非常基础且实用的创建型模式。它的主要目的是提供一个创建对象的接口,隔离了具体类的实例化过程,使得客户端可以无须知道所创建的对象的具体类,只需要知道它是从某个特定的工厂来...

    java_gongchang.rar_JAVA 教程_java工厂模式

    Java工厂模式是面向对象设计模式中的一个核心模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端需要创建一个对象时,它只需要指定所要创建的对象的类名,而无需知道具体的创建逻辑。这样,客户端与具体...

    Java 工厂设计模式例题

    例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式

    JAVA工厂模式.ppt

    JAVA工厂模式.pptJAVA工厂模式.pptJAVA工厂模式.pptJAVA工厂模式.pptJAVA工厂模式.pptJAVA工厂模式.pptJAVA工厂模式.ppt

    java工厂模式

    Java工厂模式是一种设计模式,它是创建型模式的一种,主要用于封装对象的创建过程,提供一个统一的接口,使得客户端代码在使用具体产品时无需关注产品是如何被创建的。工厂模式的核心思想在于“将对象的创建与使用...

    JAVA工厂模式

    **JAVA工厂模式** Java工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们创建对象时,不会直接实例化具体类,而是通过一个专门的工厂类来创建对象。这种模式的主要优点是客户端...

    java工厂模式讲解

    Java工厂模式是一种常用的设计模式,它是创建型设计模式的一种,主要解决对象创建过程中复杂的实例化逻辑,使得代码更加模块化,降低了系统耦合性。在Java编程中,工厂模式经常被用于封装对象的创建过程,使得客户端...

    java工厂模式-简单工厂模式

    ### Java工厂模式—简单工厂模式 #### 一、引言 简单工厂模式并不是GoF设计模式之一,但它作为设计模式的基础,在实际项目中被广泛使用。简单工厂模式的主要目的是将对象的创建与对象的使用分离,使代码更加灵活,...

    java工厂模式经典学习书籍(很详细的)

    Java工厂模式是面向对象设计模式中的一个基础模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个对象时,不会直接实例化对象,而是调用一个工厂类来创建。这种模式的核心在于封装了对象的...

    Java工厂模式.pdf

    Java工厂模式是一种设计模式,主要用于创建对象,通过提供一个过渡接口来隔离对象的创建过程,增强代码的灵活性。根据《Java与模式》的分类,工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式...

    JAVA工厂模式工厂方法模式.pdf

    JAVA工厂模式工厂方法模式.pdf

    java工厂模式综合讲解

    Java工厂模式是一种设计模式,它是创建型模式的一种,主要用于封装对象的创建过程,提供一个统一的接口,使得客户端代码在使用具体产品时无需关注产品是如何被创建的。工厂模式的核心思想是“隔离类的实例化过程”,...

    Java 工厂模式 抽象工厂 工厂方法模式

    本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...

Global site tag (gtag.js) - Google Analytics