【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.      由于实现类可能会非常多,这里就需要加非常多的分支判断;












原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝转账到注销的账号怎么办 支付宝用户支付密码被锁定怎么办 淘宝提现需要的手机宝令怎么办 手机换号码了支付宝账号怎么办 卖家收到货迟迟不给退款怎么办 闲鱼东西已发出买家申请退款怎么办 如果东西在路上买家要退款怎么办 卖家收到退的货后不退款怎么办 扣48分淘宝被限制登录怎么办 淘宝网申请退款卖家不理怎么办 高考生如果把登录密码忘记了怎么办 普高考生登录密码忘记了怎么办 淘宝买的流量卡然后网卡怎么办? 忘记了qq号绑定了手机怎么办 微信绑定qq号忘记了怎么办 扣扣密码忘了手机号换了怎么办 如何更改微信登录密码忘记了怎么办 阿里卖家不肯同意退货退款怎么办 新买的号码被绑定微信怎么办 如果换手机原来旧手机支付宝怎么办 支付宝注册证件已过有效期怎么办 支付宝账号是手机号换号怎么办 淘宝网卖假药伤了别人身体怎么办 微信手机登录收不到验证码怎么办 淘宝店的宝贝没有尺码选项怎么办 淘宝账号被保护要自助开通怎么办 小米平板经常出现系统无响应怎么办 淘宝买家被取消运费险了怎么办 新开的淘宝直播店没有流量怎么办 淘宝买的东西一直不发货怎么办 在淘宝上买了东西不发货怎么办 宝贝好几天拉一次吃的也少怎么办 淘宝快递正在运输途中想退货怎么办 淘宝买的东西退货商家拒收怎么办 手机屛上出现了微信图标怎么办 手机用了两年了反应太慢怎么办 魅族手机显示手机已锁定怎么办 为什么微信注册要安全验证码怎么办 微信帐号异常无法领取红包怎么办 帮朋友代付在支付宝被骗怎么办 商家说未收到货拒绝退款怎么办