设计模块之简单工厂
来源:互联网 发布:手机淘宝联盟怎样提现 编辑:程序博客网 时间:2024/06/05 07:31
简单工厂模式:从名字来看 工厂:就是生产产品的,那么在java中肯定是创建对象的,而在java中创建对象我们new一个就是了,为什么还要使用工厂去new对象呢?先看下简单工厂模式后再回来解释这个问题
简单工厂模式的定义:提供一个创建实例功对象的功能,而无需关心其具体的实现,被创建实例的类型可以是接口,抽象类,具体的类
简单工厂结构如图:
说明:
Api:定义客户所需的功能接口(也就是获取创建实例的对象)
Impl:具体实现Api的实现类,可能会有多个
Factory:工厂,选择合适的实现类来创建Api接口对象
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
/** * 客户端,使用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中添加相应的代码即可,我们在外部调用就变的很简单,通常还要做缓存,而不是每次都去new一个实例,具体的还要看项目需求了,
0 0
- 设计模块之简单工厂
- 设计模式 之简单工厂+ 工厂模式
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂.
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 有关iOS GCD上的一些资料
- android自定义Tabs控件,基于ScrollView+ViewPager实现。
- 黑马程序员_Java基础篇(三)——抽象类和接口的对比
- Interesting Calculator
- TDD in ABAP开发(一:概念)
- 设计模块之简单工厂
- 前端技术Bootstrap的hello world
- ADT中显示中文乱码问题
- TDD in ABAP开发(二:程序例子)
- cocos2dx ActionManager动作管理
- 传递动态内存
- C#中图片与BASE64码互相转换
- 非递归实现快速排序算法
- C语言中的printf与scanf函数