【Java设计模式】简单工厂模式
来源:互联网 发布:wpa2psk破解软件 编辑:程序博客网 时间:2024/05/18 09:17
PS: 年初换了一家公司,在这期间基于SpringBoot和SpringCloud搭建了一套环境用于重构公司的某接口系统,现已上线;
在这过程中,很多共用的模块,实现的功能需要抽象和封装,但是在面向对象设计这块非常薄弱,
导致在搭建系统的时候花了非常多的时间去考虑该怎么设计以达到系统的后期可维护和可扩展。
所以决定将设计模式再学习和研究一遍(基于《研磨设计模式》这本书)
简单工厂模式,不是Gof拿23种设计中的模式,但是用来过度还是很不错
1. 定义
提供一个创建对象实例的功能,而无须关心具体的实现,被创建的实例可以是接口,抽象类,或者具体的类.
2. 解决的问题
使用者无须关心具体的创建过程,只需要调用工厂创建自己需要的实例,这是封装并隔离的思想.
3. 例子
我是一个轮滑(花式刹停)爱好者,所以后面的例子都会基于轮滑的例子来说明;比如生产一双轮滑鞋,我不需要关心这双轮滑鞋具体怎么生产的,我只需要通过轮滑工厂去创建就行,同样为了加入接口隔离的思想,例子这里使用接口来实现。
接口:定义一个轮滑厂商接口,有一个创建轮滑鞋的方法.
实现接口类:圣巴轮滑厂商,Evo轮滑厂商分别实现接口,(这两个是国外高端轮滑鞋生产厂商).
工厂类:根据参数返回具体的厂商
Main:测试调用
类图:
4. 示例代码
package com.bufoon.test.gof.simpleFactory;/** * 轮滑厂商接口* @ClassName: SkateVendorI * @Description: 轮滑厂商接口,定义了一个创建轮滑鞋的方法 * @author anling.song * @date 2017年7月6日 上午11:35:22 */public interface SkateVendorI {/** * 创建轮滑鞋 */public void createSkate();}
package com.bufoon.test.gof.simpleFactory;/** * 轮滑厂商实现类* @ClassName: EvoSkateVendorImpl * @Description: Evo 轮滑厂商实现类 * @author anling.song * @date 2017年7月6日 上午11:39:26 */public class EvoSkateVendorImpl implements SkateVendorI {public void createSkate() {System.out.println("EVO轮滑:创建一双EVO轮滑");}}
package com.bufoon.test.gof.simpleFactory;/** * 轮滑厂商实现类* @ClassName: SebaSkateVendorImpl * @Description: 实现类圣巴轮滑厂商 * @author anling.song * @date 2017年7月6日 上午11:36:53 */public class SebaSkateVendorImpl implements SkateVendorI {@Overridepublic void createSkate() {System.out.println("圣巴轮滑:创建一双SEBA轮滑");}}
package com.bufoon.test.gof.simpleFactory;/** * 工厂类* @ClassName: SkateFactory * @Description: 用于创建轮滑厂商实例 * @author anling.song * @date 2017年7月6日 下午1:36:03 */public class SkateFactory {/** * 创建轮滑厂商实例 * @param cause * @return */public static SkateVendorI newSkateVendor(int cause){SkateVendorI skateVendor = null;switch (cause) {case 1:skateVendor = new SebaSkateVendorImpl();break;case 2:skateVendor = new EvoSkateVendorImpl();break;default:skateVendor = new SebaSkateVendorImpl();}return skateVendor;}}
package com.bufoon.test.gof.simpleFactory;public class Main {public static void main(String[] args) {SkateVendorI skateVendor1 = SkateFactory.newSkateVendor(1);skateVendor1.createSkate();SkateVendorI skateVendor2 = SkateFactory.newSkateVendor(2);skateVendor2.createSkate();}}
输出:
圣巴轮滑:创建一双SEBA轮滑
EVO轮滑:创建一双EVO轮滑
5. 思考
a. 不好扩展,如果需要创建其它实例,需要修改代码(不过可以根据配置文件用反射去创建实例);
b. 由于实现类可能会非常多,这里就需要加非常多的分支判断;
阅读全文
0 0
- java 简单工厂设计模式
- JAVA设计模式--简单工厂
- Java简单工厂设计模式
- Java设计模式---简单工厂
- Java设计模式---简单工厂
- java简单工厂设计模式
- java设计模式--简单工厂
- java设计模式----简单工厂
- java简单工厂设计模式
- java--简单工厂设计模式
- java简单工厂设计模式
- java简单工厂设计模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- JAVA设计模式 — 简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- Android 6.0运行时权限处理与封装(一)
- C++ Primer 练习答案 1.2节练习
- bzoj2460 [ Beijing2011 ] -- 线性基+贪心
- Linq常用List操作总结,Foreach、分页、交并集、去重、SelectMany等
- Linux命令大全完整版
- 【Java设计模式】简单工厂模式
- Java高并发,如何解决,什么方式解决
- 实例化一个对象(类加载)的执行顺序详解
- 安装libstdc++.so.6
- 汽车保险一年不少钱呀
- POJ-1312 棋盘问题
- 文章标题
- jdbcType与javaType的对应关系
- unity学习日记:Ray(射线)相关知识