设计模块之简单工厂
简单工厂模式:从名字来看 工厂:就是生产产品的,那么在java中肯定是创建对象的,而在java中创建对象我们new一个就是了,为什么还要使用工厂去new对象呢?先看下简单工厂模式后再回来解释这个问题
简单工厂模式的定义:提供一个创建实例功对象的功能,而无需关心其详细的实现,被创建实例的类型能够是接口,抽象类,详细的类
简单工厂结构如图:
说明:
Api:定义客户所需的功能接口(也就是获取创建实例的对象)
Impl:详细实现Api的实现类,可能会有多个
Factory:工厂。选择合适的实现类来创建Api接口对象
Client:client,通过Factory去获取Api接口对象,然后面向Api接口编程
代码例如以下:
Api.java
/**
* 接口的定义,该接口能够通过简单工厂来创建
*/
public interface Api {
/**
* 示意,详细的功能方法的定义
* @param s 示意,须要的參数
*/
public void operation(String s);
}Factory.java
/**
* 工厂类,用来创造Api对象
*/
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;
}
}ImplA.java
/**
* 接口的详细实现对象A
*/
public class ImplA implements Api{
public void operation(String s) {
//实现功能的代码,示意一下
System.out.println("ImplA s=="+s);
}
}ImplB.java
/**
* 接口的详细实现对象B
*/
public class ImplB implements Api{
public void operation(String s) {
//实现功能的代码,示意一下
System.out.println("ImplB s=="+s);
}
}Client.java
/**
* client。使用Api接口
*/
public class Client {
public static void main(String[] args) {
//通过简单工厂来获取接口对象
Api api = Factory.createApi(1);
api.operation("正在使用简单工厂");
}
}从上面的代码中Client中并没有直接去new一个 ImplA的实例对象,而是通过Factory工厂类去实现new一个ImplA类。这就相当于在Client类与ImplA类之间转换了一下,
从而我们要创建什么对象。仅仅要在createApi()中的參数变一下就得到了对应的对象,详细的实现是封装在Factory类中,这样做的优点是以后系统维护和升级中假设要加入一个实例对象,仅仅要在Factory中加入对应的代码就可以,我们在外部调用就变的非常easy,通常还要做缓存,而不是每次都去new一个实例,详细的还要看项目需求了,
浙公网安备 33010602011771号