<其它设计模式介绍及案例源码下载 >
简介:简单工厂模式(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(); } }
本文深入解析了简单工厂模式,一种创建对象的方式,属于创建型模式。介绍了其三种角色:工厂类、抽象产品和具体产品,以及如何通过工厂类创建不同实例。探讨了模式的优点和缺点,并提供了Java实现案例。
4830

被折叠的 条评论
为什么被折叠?



