博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式三之简单工厂模式】设计模式中简单工厂模式的应用----java
阅读量:3746 次
发布时间:2019-05-22

本文共 2995 字,大约阅读时间需要 9 分钟。

###简单工厂模式的应用

首先扯一下简单工厂模式的概念吧;

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

  简而言之:就是一个工厂,在需求不同的情况下,可以生产不同的产品(一个工厂,多种产品)
  
  然后本篇博客主要写的是以小米的产品线为一个例子,假设小米所有的产品线都是一个工厂生产的,那么先要有一个 XiaoMiFactory,生产的不管是手环也好,手机也好这些都是小米的产品对吧,那么总要给所有产品打个小米产品的标签吧,所有XiaoMiProduct就出来,然后再具体细化到小米有手机业务XiaoMiTelephone,有小米手环XiaoMiShouHuan,有小米电脑XiaoMiComputer等等,
  下面以一张UML图示的形式展示一下逻辑关系吧,画的不好见谅
工厂模式UML图示

下面才是Code部分:

1:首先创建我们的产品类:

XiaoMiProduct

package com.demo.simpleFactory;public abstract class XiaoMiProduct {	public abstract String getXiaoMiProductName();}

2:细化我们的产品

XiaoMiComputer

package com.demo.simpleFactory;public class XiaoMiComputer extends XiaoMiProduct{	@Override	public String getXiaoMiProductName() {		// TODO Auto-generated method stub		return "XiaoMiComputer";	}}

XiaoMiShouHuan

package com.demo.simpleFactory;public class XiaoMiShouHuan extends XiaoMiProduct{	@Override	public String getXiaoMiProductName() {		// TODO Auto-generated method stub		return "XiaoMiShouHuan";	}}

XiaoMiTelephone

package com.demo.simpleFactory;public class XiaoMiTelephone extends XiaoMiProduct{	@Override	public String getXiaoMiProductName() {		// TODO Auto-generated method stub		return "XiaoMiTelePhone";	}}

3:然后建造我们的工厂

XiaoMiFacotry

package com.demo.simpleFactory;public class XiaoMiFacotry {	public static final String  XIAOMI_SHOUHUAN = "xiaomi_shouhuan";	public static final String  XIAOMI_COMPUTER  ="xiaomi_computer";	public static final String 	XIAOMI_TELEPHONE = "xiaomi_telephone";		public static XiaoMiProduct produceXiaoMiProduct(String tagName){		XiaoMiProduct product = null;		if(tagName.equals(XIAOMI_SHOUHUAN)){			product = new XiaoMiShouHuan();		}else if(tagName.equals(XIAOMI_COMPUTER)){			product = new XiaoMiComputer();		}else if(tagName.equals(XIAOMI_TELEPHONE)){			product = new XiaoMiTelephone();		}else{			return null;		}		return product;	}	}

4:最后是我们的Test部分

package com.demo.simpleFactory;public class SimpleFactoryMain {	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub		XiaoMiProduct xiaoMiProductShouHuan = null;		XiaoMiProduct xiaoMiProductComputer = null;		XiaoMiProduct xiaoMiProductTelephone = null;				xiaoMiProductShouHuan = XiaoMiFacotry.produceXiaoMiProduct(XiaoMiFacotry.XIAOMI_SHOUHUAN);		xiaoMiProductComputer = XiaoMiFacotry.produceXiaoMiProduct(XiaoMiFacotry.XIAOMI_COMPUTER);		xiaoMiProductTelephone = XiaoMiFacotry.produceXiaoMiProduct(XiaoMiFacotry.XIAOMI_TELEPHONE);				System.out.println("xiaomishouhuan:"+xiaoMiProductShouHuan.getXiaoMiProductName());		System.out.println("xiaoMiProductComputer:"+xiaoMiProductComputer.getXiaoMiProductName());		System.out.println("xiaoMiProductTelephone:"+xiaoMiProductTelephone.getXiaoMiProductName());	}}

下面的是

输出的结果

其实这个简单工厂模式其实思想很简单,就是一个工厂在不同的时候生产不同的产品,好比做现在蒙牛,蒙牛的工厂在夏天生产冷饮,在冬天生产酸奶这样的例子。

当然简单工厂模式的设计其实是有点违反了我们在编写代码的时候遵循的开闭原则,即对扩展开放,对修改封闭,因为如果每次增加一个商品的话,我们都需要对简单的工厂中的工厂方法进行修改,这就导致可能耦合性并不是能够很好的达到预计的要求

代码是可以直接进行run的,有兴趣的可以拿出去跑一下,因为这个简单工厂模式,其实相对来说是比较容易的,所以也就不在多赘述了。

##

你可能感兴趣的文章
GitHub 计划登陆中国,将产生哪些影响与意义?
查看>>
2019 我是怎样熬过来的?
查看>>
【C++学习计划】深入浅出——变量作用域(Day3)
查看>>
策略模式
查看>>
Spring Boot 实战 入门
查看>>
关于web系统整体优化提速总结
查看>>
分布式文件系统 - fastDFS
查看>>
BUAA OO 2019 第一单元作业总结
查看>>
格网编码查询方案在项目运用上的进一步探索
查看>>
BUAA-OO-2019 第三单元总结
查看>>
Matlab策略模式
查看>>
架构整洁之道
查看>>
支付渠道路由系统进化史
查看>>
行为型模式:解释器模式
查看>>
深入理解设计模式(22):享元模式
查看>>
spring boot
查看>>
Angular框架
查看>>
行为型模式:模板方法
查看>>
spring cloud之Feign的使用
查看>>
Billboard HDU - 2795(树状数组,单点修改,区间查询)
查看>>