近来在学习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)使用简单工厂