工厂方法模式

本文详细介绍了工厂方法模式的定义、类图、源码实现及优缺点,并探讨了其特殊应用如简单工厂模式、多个工厂方法模式、替代单例模式及延迟初始化等。通过实例代码展示了如何在客户端调用工厂方法模式来创建产品类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 工厂方法模式定义

Define an interface for creating an object,but let subclasses decide which class to instantite.Factory Method lets a class defer instantation to subclass.

工厂方法模式的一般类图

170754_xNYT_1470003.jpg

工厂方法模式的通用源码

1.抽象产品类

package FactoryMethod;

public abstract class Product {
	public void method1(){
		System.out.println("这是产品类的业务逻辑处理方法");
	}
		
	public abstract void method2();

2.具体的产品类

package FactoryMethod;

public class ConcreteProduct1 extends Product {

	@Override
	public void method2() {
		System.out.println("这是产品一的业务逻辑处理方法");
	}
}



package FactoryMethod;

public class ConcreteProduct2 extends Product {

	@Override
	public void method2() {
		System.out.println("这是产品二的业务逻辑处理方法");
	}

}

3.抽象工厂类

package FactoryMethod;

public abstract class Creator {
	public abstract <T extends Product> T createProduct(Class<T> c);
}

4.具体工厂类

package FactoryMethod;

public class ConcreteCreator extends Creator {

	
	public <T extends Product> T createProduct(Class<T> c) {
		
		Product product = null;
		try {
			product = (Product)Class.forName(c.getName()).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (T)product;
	}
	
}

5.客户端代码

package FactoryMethod;

public class Client {

	/**
	 * @author ZhangH
	 */
	public static void main(String[] args) {
		Creator creator = new ConcreteCreator();
		Product product1 = creator.createProduct(ConcreteProduct1.class);
		Product product2 = creator.createProduct(ConcreteProduct2.class);
		
		product1.method1();
		product1.method2();
		
		System.out.println();
		
		product2.method1();
		product2.method2();

	}

}


工厂方法模式的优点

优点:

    1. 良好的封装性,降低模块间的耦合;

    2. 面向产品接口,屏蔽产品类。

    3. 典型的解耦框架。高层模块只需要知道产品的抽象类。

    4. 符合迪米特法则、依赖倒置原则、里氏替换原则。

工厂方法模式的特殊应用

  1. 简单工厂模式(静态工厂模式)

    1. 描述:去掉了工厂方法模式中的工厂抽象类,同时把具体工厂方法中的方法设置为静态。

    2. 优点:简化结构、调用过程

    3. 缺点:不利于扩展、不符合开闭原则

  2. 多个工厂方法模式

    1. 描述:对普通工厂方法模式的改进,多个工厂方法模式是提供多个工厂方法,分别创建对象

    2. 优点:创建类的职责清晰,结构简单

    3. 缺点:增加扩展难度(增加协调类,封装子工厂类,对高层提供统一的访问接口)

  3. 替代单例模式

    1. 描述:采用工厂方法模式实现单例模式的功能

    2. 做法:

      1. 私有单例类,不允许new出对象

      2. 在工厂类内,使用反射机制创建一个对象

  4. 延迟初始化

    1. 描述一个对象被消费完毕后,不立刻释放,工厂类保持其,等待再次使用。

    2. 做法:

      1. 在工厂类中以集合的形式容纳所有产生对象

      2. 每次请求创建时,如果集合中已有则直接返回;若没有则创建,放入集合并返回


参考资料:

《设计模式之禅》        秦小波著

《JAVA设计模式》        来自网络

转载于:https://my.oschina.net/u/1470003/blog/222163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值