Java设计模式之简单工厂模式

近来在学习Java的设计模式,一直觉得设计模式很难,所以一直没有去接触,一则是工作比较忙没有闲工夫去学习,二来是因为自己比较懒所以也懒得动,幸亏今天在公司还挺闲的,所以找了一本书来学习下Java的设计模式。

简单工厂的定义

应用简单工厂来解决问题的思路

简单工厂的结构和说明

简单工厂代码

使用简单工厂重写示例

模式讲解

简单工厂中方法的写法

简单工厂的优缺点

思考简单工厂

1、简单工厂的定义

提供一个创建对象实例的功能,而无须关系其具体的实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

2、应用简单工厂来解决问题的思路

简单工厂就是不能让模块外部知道模块内部的具体实现,但是模块内部还是可以知道实现类的,而且创建接口是需要知道具体的实现类的。
所以,干脆在模块内部新建一个类,在这个类里面来创建接口,然后把创建的接口返回给具体调用者,这样,外部应用就只需根据这个类来获取相应的接口对象,然后就可以操作接口定义的方法了。把这样的对象就称作简单工厂,就叫它Factory。

3、简单工厂的结构和说明

简单工厂的结果如下图所示。

简单工厂结构图

Api:定义客户所需的功能接口。

Impl:具体实现Api的实现类,可有多个,根据具体业务。

Factory:工厂,选择合适的实现类来创建Api接口对象。

Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程。

4、简单工厂代码

(1)Api定义代码如下:

public interface Api { /** * 示意,具体功能方法的定义 * @param s 示意,需要的参数 */ public void operation(String s); }

(2)定义了接口后,实现类ImplA代码如下:

public class ImplA implements Api { @Override public void operation(String s) { System.out.println("ImplA s==" + s); } }

实现类ImplB.java代码如下

public class ImplB implements Api { @Override public void operation(String s) { System.out.println("ImplB s==" + s); } }

(3)简单工厂的实现。代码如下:

/** * 工厂类,用于穿件Api对象 * @author veione */ public class Factory { /** * 具体创建Api对象的方法 * @param condition 示意,从外部传入的选择条件 * @return 创建好的Api对象 */ public static Api createApi(int condition) { //根据条件来创建具体实现对象 Api api = null; if (condition == 1) { api = new ImplA(); } else if (condition == 2) { api = new ImplB(); } return api; } }

(4)再来看下客户端的示意,代码如下:

/** * 客户端,使用Api接口 * @author veione */ public class Client { public static void main(String[] args) { // 通过简单工厂来获取接口对象 Api api = Factory.createApi(1); api.operation("使用简单工厂进行操作"); } }

5、使用简单工厂重写示例

要使用简单工厂来重写前面的示例,主要就是创建一个简单工厂对象,让简单工厂来负责创建接口对象。后客户端通过工厂获取接口对象,而不再由客户端自己创建接口对象了。
系统结构如下图所示:

系统结构图

(1)接口Api和实现类Impl和前面的示例一样,在此不再赘述。

(2)新创建一个简单工厂的对象。代码如下:

/** * 工厂类,用来创建Api对象 */ public class Factory{ /** * 具体创建Api对象的方法 * @return 创建好的Api对象 */ public static Api createApi(){ //由于只有一个实现就无需再条件判断了 return new Impl(); } }

(3)使用简单工厂

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c06fc0d49b0c4bfe2ae064ef2749a19a.html