再谈--工厂模式

为什么要使用工厂模式?

首先,工厂模式是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类。
其次,工厂模式可以降低代码重复。如果创建对象B的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的创建过程的修改维护。(当然,我个人觉得也可以把这些创建过程的代码放到类的构造函数里,同样可以降低重复率,而且构造函数本身的作用也是初始化对象。不过,这样也会导致构造函数过于复杂,做的事太多,不符合java 的设计原则。)
由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。同理,想把所有调用B的地方改成B的子类B1,只需要在对应生产B的工厂中或者工厂的方法中修改其生产的对象为B1即可,而不需要找到所有的new B()改为new B1()。
另外,因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。

1. 简单工厂 
理解 
简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 
不修改代码的话,是无法扩展的。 

public interface IProduct {
	void productName();
}
public class ProductA implements IProduct {
	@Override
	public void productName() {
		System.out.println("product A");
	}
}
public class ProductB implements IProduct {
	@Override
	public void productName() {
		System.out.println("product B");
	}
}
public class ProductFactory {
	public IProduct create(String productName) {
		switch (productName) {
			case "A":
				return new ProductA();
			case "B":
				return new ProductB();
			default:
				return null;
		}
	}
}
public class Cilent {
	public static void main(String[] args) {
		ProductFactory factory = new ProductFactory();

		IProduct productA = factory.create("A");
		productA.productName();

		IProduct productB = factory.create("B");
		productB.productName();
	}
}

2.工厂方法 
理解 
工厂方法是针 对每一种产品提供一个工厂类 。通过不同的工厂实例来创建不同的产品实例。 
在同一等级结构中, 支持增加任意产品 。 

public interface IFactory {
	IProduct create();
}
public class FactoryA implements IFactory {
	@Override
	public IProduct create() {
		return new ProductA();
	}
}
public class FactoryB implements IFactory {
	@Override
	public IProduct create() {
		return new ProductB();
	}
}
public class Cilent {
	public static void main(String[] args) {
		IFactory factoryA = new FactoryA();
		IProduct productA = factoryA.create();
		productA.productName();

		IFactory factoryB = new FactoryB();
		IProduct productB = factoryB.create();
		productB.productName();
	}
}

3.抽象工厂 
理解 
抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。 
应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。 
和工厂方法的区别是,抽象工厂往往有多种方法,可以生产多种产品,即产品簇。 

 

 

转自:http://www.iteye.com/topic/1145602

 

 

https://blog.csdn.net/llussize/article/details/80276627

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值