Java设计模式之工厂方法模式——学习笔记

本文详细解析了Java设计模式中的工厂方法模式,包括其定义、实现步骤及设计原则,通过具体代码示例展示了如何应用工厂方法模式解决实际问题,并探讨了其适用场合。

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

Java设计模式之工厂方法模式

一、定义

就是定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂不再负责具体产品的创建。

二、实现

1、定义产品

package com.product;

/**
 * 定义抽象产品类
 * @author Administrator
 *
 */

public abstract class AbstractProduct {
	
	private String name;
	
	public AbstractProduct() {	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

package com.product;

/**
 * 具体产品A
 * @author Administrator
 *
 */

public class ProductA extends AbstractProduct{
	
	public ProductA(){
		this.setName("ProductA");
	}

}

package com.product;

/**
 * 具体产品B
 * @author Administrator
 *
 */
public class ProductB extends AbstractProduct{
	
	public ProductB(){
		this.setName("ProductB");
	}

}


2、创建工厂

package com.factory;

import com.product.AbstractProduct;

/**
 * 定义工厂接口
 * @author Administrator
 *
 */

public interface IProductFactory {

	public AbstractProduct createProduct();
	
}

package com.factory;

import com.product.AbstractProduct;
import com.product.ProductA;

/**
 * 工厂实现类
 * @author Administrator
 *
 */

public class ProductFactory implements IProductFactory{

	@Override
	public AbstractProduct createProduct() {
		return new ProductA();
	}

}


3、测试

package com.main;

import com.factory.IProductFactory;
import com.factory.ProductFactory;

/**
 * 测试类
 * @author Administrator
 *
 */

public class MainApp {
	
	public static void main(String[] args){
		
		IProductFactory pf = new ProductFactory();
		System.out.print(pf.createProduct().getName());
		
	}

}
结果输出 ProductA

假如此时要生产产品B,那么我们可以再创建一个工厂的实体类,只要实现 IProductFactory,在createProduct中创建ProductB对象

三、设计原则

体现“开-闭”原则,对修改闭合,对宽展开放
依赖倒置原则,工厂和产品都依赖于抽象,而不是具体的实现类

四、适用场合

a、当子类型可能会有很多,以后需要不断增添不同的子类实现时
b、当一个系统尚在框架设计阶段,还不知道将来需要实例化哪些具体类时
c、系统设计之初不需要具体对象的概念(或者说没有具体对象的概念)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值