创建对象在面向对象程序设计中几乎无处不在,在Java中实例化一个对象是通过new关键字实现的,对对象的赋值、尤其是复杂对象的赋值往往是一个相对复杂的过程。工厂模式的作用就是对对象的创建过程进行封装的一个过程。根据不同的业务场景,工厂模式又分为:简单工厂模式、工厂方法模式、抽象工厂模式。本次总结先说下“简单工厂模式”:
简单工厂模式
简单工厂模式一般是把对象的创建过程单独提取到一个工厂类中进行,工厂类中的对象创建方法一般都是静态方法。这种方式的好处是,这个工厂类可以多处使用,能保证对象的创建过程的一致性(全局统一),以及代码的复用性。类图也很简单:
这里以模拟商场下单来说明“简单工厂模式”的用法,可以把Client看做是一个网上商场,提供一个orderProduct的下单方法。Iproduct是商品接口类,ProductA和ProductB是具体的实现,商品经过生产、打包、运输送到客户手里。下面来看具体的实现:
目标对象实现
首先看下商品基类Iproduct,以及其两个具体的商品实现类ProductA和ProductB
Iproduct
public interface Iproduct { //生产 void create(); //打包 void packages(); //运输 void transport(); }
ProductA
public class ProductA implements Iproduct{ public void create() { System.out.println("商品A生产完成"); } public void packages() { System.out.println("商品A打包完成"); } public void transport() { System.out.println("商品A运输完成"); } }
ProductB
public class ProductB implements Iproduct { public void create() { System.out.println("商品B生产完成"); } public void packages() { System.out.println("商品B打包完成"); } public void transport() { System.out.println("商品B运输完成"); } }
工厂类实现
商品接口类和实现类实现完成后,再来看下工厂类ProductFactory,其静态方法会根据不用的参数类型生产出不同的商品,给对象赋值是一个负责的业务逻辑,这里省略。
public class ProductFactory { /** * 静态工厂方法 * @param type * @return */ public static Iproduct createProduct(String type){ if("A".equals(type)){ //省略对象赋值过程 return new ProductA(); }else if ("B".equals(type)){ //省略对象赋值过程 return new ProductB(); } return null; } }
Client业务类实现
接下来看下Client类,可以把这个类看做是一个网上商城,提供一个下单方法:
public class Client { /** * 下单方法,选择不同的商品类型进行购买 * @param type */ public void orderProduct(String type){ Iproduct product = ProductFactory.createProduct(type); //生产商品 product.create(); //打包商品 product.packages(); //运输商品 product.transport(); System.out.println("订单完成"); } }
整个模式的实现完毕,最后创建main方法进行测试:
public class Main { public static void main(String[] args) { Client client = new Client();//创建商城 client.orderProduct("A");//选择购买"A"商品 client.orderProduct("C");//选择购买不存在的"C"商品 } }
运行main方法,打印信息如下:
产品A生产完成 产品A打包完成 产品A运输完成 购买商品A的订单完成 商城没有该商品,请选择A、B商品进行购买
小结
简单工厂模式,总的来说使用起来比较简单,需要注意的是商品必须要有一个基类Iproduct(并不局限为接口,也可以是抽象类),这样在Client类中可以实现面向接口编程,而不必在意具体的实现,但还不够彻底,ProductFactory还是具体的实现类。如果需要创建的对象数目较少,且对象类目单一,使用简单工厂模式实现也是不错的选择。
出处:
相关推荐
工厂模式(Factory Pattern)作为创建型模式的一种,通过提供一个统一的接口来创建对象,封装对象的创建逻辑,提高代码的灵活性和可维护性。
抽象工厂模式是一种创建型设计模式,它的主要目标是提供一个接口或抽象类,用于创建一系列相关或依赖的对象。该模式的主要优点在于,它可以为客户端代码提供一个统一的接口,使得客户端无需关心具体实现细节。抽象...
抽象工厂模式为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对应的系列来创建一个具体的工厂类别。 2. 抽象工厂模式中的角色 2.1 抽象工厂(Abstract...
抽象工厂Abrstract Factory设计模式的使用思路 1.提供一系列相互依赖对象的创建 2.封装对象的常规创建new方法 3.提供统一调用数据访问方法的方式 4.避免调用数据访问方法和具体对象创建的松耦合
简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):...
现在该设计模式粉墨登场了,这种根据不同情况创建不同类型的方式,工厂模式是最拿手的。先看看我们 的工厂需要生产哪些产品呢?虽然这里有两种不同类型的媒体AudioMedia 和 VideoMedia(以后可能更 多),但它们同时...
1、抽象工厂模式是提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。 2、建造模式是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 3、工厂方法模式定义一个...
简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。 工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。 抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。 建造者模式:...
抽象工厂模式提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类【GOF95】 【抽象工厂模式结构图】 【抽象工厂模式中主要角色】 抽象工厂(Abstract Factory)角色:它声明一个创建抽象产品对象的...
工厂模式 实现了创建者和调用者的分离。将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性。 核心本质 实例化对象,用工厂方法代替new操作。 将...
例如,简单工厂模式通过BeanFactory展现,实现了松耦合和动态对象创建。工厂方法模式则通过FactoryBean接口展示,让对象创建更加灵活。单例模式保证了Bean实例的唯一性,而适配器模式和装饰器模式则提高了代码的可...
因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些...
对象工厂,负责完成基础的创建工作; 对象管理关系如下: TDataFactory | --- TCHintForm | --- TCDataSetConnect | --- TCDataSetThread | --- TCDataSet | --- TCQuery | --- TCStoredProc | --...
抽象工厂模式提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类【GOF95】 二、抽象工厂模式结构图 三、抽象工厂模式中主要角色 抽象工厂(Abstract Factory)角色:它声明一个创建抽象产品对象...
Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消 工厂模式 费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如 何创建及如何向客户端...
当前模式创建模式:模式描述abstract_factory使用具有特定工厂的通用函数borg一个在实例之间共享状态的单例builder而不是使用多个构造函数,builder对象接收参数并返回构造的对象工厂委托一个专门的函数/方法来创建...
使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式之 ...
抽象工厂模式又称kit模式,它是一种对象创建型模式。 场景:还是上面的Dialog类,如果继续向后发展,会有各种各样的弹窗,如果新增一个弹窗包含了notice和toast。这样的情况下,我们不需要再单独新增一个工厂类。...
5,抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 6,命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可以支持撤销操作。 ...