设计模式笔记之简单工厂模式的使用

本文深入解析了简单工厂模式,一种创建对象的方式,属于创建型模式。介绍了其三种角色:工厂类、抽象产品和具体产品,以及如何通过工厂类创建不同实例。探讨了模式的优点和缺点,并提供了Java实现案例。

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

<其它设计模式介绍及案例源码下载 >

简介:简单工厂模式(SimpleFactory Pattern)提供了一种创建对象的最佳方式,属于创建型模式,但不属于23种GOF设计模式之一。在简单工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,是由一个工厂对象决定创建出哪一种产品类的实例。(有一种分法说简单工厂模式是工厂方法的一个特例)

三种角色组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的CommonInterf接口。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的EntityA、EntityB类。

主要解决:我们明确地计划不同条件下创建不同实例时。主要解决接口选择的问题。

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了,扩展性高2、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每增加一个产品类,都要在工厂类EntityFactory中增加相应的商业逻辑和判 断逻辑,这违背开闭原则的。

使用场景: 1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

实现案例:公共接口CommonInterf作为产品类的行为规范,EntityFactory作为各产品类的创建工作

比较:抽象工厂模式工厂方法

例如下:

public interface CommonInterf {

	public void doAct();
}
public class EntityFactory {

	public CommonInterf getEntity(String entityName) {
		
		if("EntityA".equals(entityName)) {
			return new EntityA();
		} else if("EntityB".equals(entityName)) {
			return new EntityB();
		} else if("EntityC".equals(entityName)) {
			return new EntityC();
		} else 
			return null;
	}
}
public class EntityA implements CommonInterf {
	@Override
	public void doAct() {
		System.out.println(this.getClass().getName()+"的方法");

	}

}
public class EntityB implements CommonInterf {
	@Override
	public void doAct() {
		System.out.println(this.getClass().getName()+"的方法");
	}

}
public class EntityC implements CommonInterf {
	@Override
	public void doAct() {
		System.out.println(this.getClass().getName()+"的方法");

	}

}
public class TestClass {

	public static void main(String[] args) {
		EntityFactory ef=new EntityFactory();
		CommonInterf cia=ef.getEntity("EntityA");
		cia.doAct();
		cia=ef.getEntity("EntityB");
		cia.doAct();
		cia=ef.getEntity("EntityC");
		cia.doAct();

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值