简单工厂模式--使用--扩展--缺点--适用情况--

简单工厂模式的一些基本知识

本文主要参见自《Java与模式》


一、UML类图表示如下


二、角色如下

1.Product接口:

a.含有具体产品的共有接口。

2.ProductA,ProductB

a.工厂类所创建的这个角色的实例。

3.Factroy:

a.简单工厂模式的核心。

b.工厂类在客户端的直接调用下创建产品对象。


三、基本代码实现如下:

1.Product接口:

package com.jue.dp;
public interface Fruit {

	void grow();
	
	void harvest();
	
	void plant();
}

2.ProductA,ProductB

package com.jue.dp;

public class Apple implements Fruit {
	public static final String APPLE = "apple";

	@Override
	public void grow() {
		LogUtil.logs(APPLE, "grow");
	}

	@Override
	public void harvest() {
		LogUtil.logs(APPLE, "harvest");
	}

	@Override
	public void plant() {
		LogUtil.logs(APPLE, "plant");
	}

}

其他雷同!

3.Factroy:

package com.jue.dp;

public class FruitFactory {

	public static Fruit newInstance(String name) {
		if (name.equals("Apple")) {
			return new Apple();
		}

		if (name.equals("Grape")) {
			return new Grape();
		}

		if (name.equals("Strawberry")) {
			return new Strawberry();
		}
		throw new BadFruitException(name);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fruit f1 = FruitFactory.newInstance("Apple");
		f1.plant();
		f1.grow();
		f1.harvest();
	}
}

四、优点:

1.责任分割:客户端可以免除直接创建产品对象的责任,客户端无需考虑如何创建,只需要知道创建什么以及负责消费产品

五、缺点

1.开闭原则:

a.客户端符合开比原则

b.工厂类不符合:需要修改核心类,增加新的产品将导致工厂类的修改。

2.Factory变得臃肿:当产品比较多的时候,factory会无比臃肿。

3.无法继承:简单静态工厂的创建方法通常是static的,导致工厂角色无法形成继承结构。

六、扩展 : 使用反射可以创建任意产品对象。

public class FruitFactory2 {

	public static Fruit newInstance(String name) {

		Fruit f = null;
		try {
			f = (Fruit) Class.forName(name).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return f;
	}
	
	public static void main(String args[]){
		Fruit f1 = FruitFactory2.newInstance("com.jue.dp.Apple");
		f1.plant();
		f1.grow();
		f1.harvest();
	}
}


七、使用场景

a.简单工厂模式所创建的对象往往属于一个产品等级。

b.创建的对象比较少。

c.客户端关心于创建什么以及如何消费,而不关心如何创建。

八、简单工厂模式与单例模式的关系

1.抽象产品省略,工厂角色与具体产品合并,这种退化的简单工厂模式与单例有很多相似之处,但是与单例是不同的。

2.不同之处:

工厂模式总是创建新的实例。

单例模式要求单例类的构造器是私有的,禁止外部客户端对其实例化。

3. 联系

单例模式是建立在简单静态工厂模式基础之上的。 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值