【设计模式三之简单工厂模式】设计模式中简单工厂模式的应用----java

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

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
  简而言之:就是一个工厂,在需求不同的情况下,可以生产不同的产品(一个工厂,多种产品)
  
  然后本篇博客主要写的是以小米的产品线为一个例子,假设小米所有的产品线都是一个工厂生产的,那么先要有一个 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的,有兴趣的可以拿出去跑一下,因为这个简单工厂模式,其实相对来说是比较容易的,所以也就不在多赘述了。

##欢迎访问博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值