简单工厂模式的应用
首先扯一下简单工厂模式的概念吧;
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
简而言之:就是一个工厂,在需求不同的情况下,可以生产不同的产品(一个工厂,多种产品)
然后本篇博客主要写的是以小米的产品线为一个例子,假设小米所有的产品线都是一个工厂生产的,那么先要有一个 XiaoMiFactory,生产的不管是手环也好,手机也好这些都是小米的产品对吧,那么总要给所有产品打个小米产品的标签吧,所有XiaoMiProduct就出来,然后再具体细化到小米有手机业务XiaoMiTelephone,有小米手环XiaoMiShouHuan,有小米电脑XiaoMiComputer等等,
下面以一张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的,有兴趣的可以拿出去跑一下,因为这个简单工厂模式,其实相对来说是比较容易的,所以也就不在多赘述了。