第2篇 简单工厂模式

         在本文咱们先来了解一下,简单的工厂模式,简单的工厂模式不属于23种设计模式,但是工厂方法模式是属于23种设计模式的。要了解工厂方法模式先得了解一下简单工厂模式,一步一步,慢慢来就好了。突然想起来小时候学的一篇文章,《走一步,再走一步》,相信大家应该熟悉吧。面对巨大的困难,不要去想他有多困难,你只要想着走一步,再走一步,在巨大的困难也会解决的。完,扯远了。算是对自己的鼓励吧。
          1.什么是工厂模式
         先从我们的生活出发,在我们的生活中,我们每个人得以生存下去,必须需要各种各样的物品。但是,我们当自己需要什么产品的时候就自己去生产吗?好像不是这样的。有可能是我是一个面包师,我只生产面包。其他所有人需要面包都到我这里来买。而我需要火腿的时候我就去找生产火腿的人来买。其实这就是工厂模式了,好多东西我们需要的时候不自己去生产,而是找工厂去拿。在我们的程序中也是这样的,当一个类需要哪个对象的实例的时候,自己new多麻烦啊,找工厂去获得。这便是工厂模式。
          2.为什么是工厂模式
    那么,我们为什么要使用工厂模式呢?使用它有什么好处吗?
首先,程序中到处充斥着一个对象的创建和初始化工作,会使代码看起来比较凌乱。
其次,对于需要多个参数初始化对象的时候,一个地方改了,其他的地方都得跟着改。
再者,如果每个类是需要什么就自己去创建的话,那么这个类的未免太复杂,功能太多。
再者,工厂模式符合软件工程“高内聚低耦合”的特点
其实工厂模式还有很多特点.....就不一一赘述了。

          3.工厂模式如何定义

首先我们先来简单定义一下“物品”,物品有各种各样的,但是他们都是物品,这里我们用接口来定义一下物品类:

  package com.john;
  public interface Product {
  	  void operation();
   }
     然后我们再来定义各种各样的物品:
     物品1:

package com.john;

public class Product1 implements Product {
	@Override
	public void operation() {
	}
}
    物品2:

package com.john;
public class Product2 implements Product {
	@Override
	public void operation() {
	}
}
    在这里就先定义两个物品吧。接下来我们定义工厂,工厂嘛,自然就是生产物品的地方咯!
			        package com.john;
					public class Factory {
						public static Product createProduct(String productName){
						//根据传入参数的不同生产不同的对象
						if("1".equals(productName)){
							return new Product1();
						}
						else if("2".equals(productName)){
							return new Product2();
						}
						return null;
					}
				}

     我们来看看这个工厂,你只要告诉他我需要物品几,他便会给你返回你要的物品了。是不是很方便啊?但是问题来了,在我们的工厂中如果有365种产品要生产呢?那我岂不是要if-else-if很多次啊?其实我们可以利用Java的反射机制,让你一次if-else也不用写。下面是改进的工厂类:

package com.john;
public class Factory {
	public static Product createProduct(String productName){
		//根据传入参数的不同生产不同的对象
		Product product = null;
		String classname = "com.john."+productName;//forName这个方法中传入的是类名,要注意加上包名哦
		try {
			product = (Product)Class.forName(classname).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return product;
	}
}
这样我们就省去了很多的if-else,是不是很方便呢?好了,简单的工厂模式就先到这里了!下一篇说工厂方法模式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值