设计模式_工厂模式(3)

28 篇文章 0 订阅
25 篇文章 0 订阅

  • 什么是工厂模式
  • 工厂模式的例子
  • 工厂模式的优缺点
  • 和简单工厂模式的比较
  • 闲言碎语

什么是工厂模式

       接着简单工厂模式的那个情景,随个那个老板的生意越做越好,他那个小商铺的规模也扩大了好几倍.来他这买水果的客人越来越多,他发现自己一个人已经忙不过来了.于是,他就花钱雇了两个员工A,B.他们分别负责各自区域的水果.而他呢.只负责指挥两名员工.现在,我们对这个情节进行分析:

       老板(工厂接口):这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

       商铺(产品接口):他负责指挥具体的产品如何应该完成什么任务,而具体的完成过成并不参与,他也是工厂的核心.

       区域AB(具体的产品):具体的产品,产品所应该有的功能应该由它承担.

       员工AB(具体的工厂):具体的工厂,工程所完成的任务应该由它承担.

     

       UML



工厂模式的例子

工厂的接口


/*
 * 工厂模式的接口
 */
public interface Factory {
	// 创建产品接口
	public Fruit createProduct();

}

 

产品的接口


/*
 * 水果(产品)的抽象接口
 */
public interface Fruit {
	// 水果(产品)的公有方法
	public void introducte();

}

 

具体的工厂A


/**
 * 产品A工厂
 * 
 * @author Jason
 *
 */
public class FruitAFactory implements Factory {

	@Override
	public Fruit createProduct() {
		// TODO Auto-generated method stub
		return new FruitA();
	}

}
 

具体的工厂B


/*
 * 水果B工厂
 */
public class FruitBFactory implements Factory {

	@Override
	public Fruit createProduct() {
		// TODO Auto-generated method stub
		return new FruitB();
	}

}


具体的产品A


/*
 * 区域A水果
 */
public class FruitA implements Fruit {

	public FruitA() {
		System.out.println("区域A水果被创建!");
	}

	@Override
	public void introducte() {
		System.out.println("我是A区域水果!");
	}

}



具体的产品B

/*
 * 区域B水果
 */
public class FruitB implements Fruit {

	public FruitB() {
		System.out.println("区域B被创建!");
	}

	@Override
	public void introducte() {
		System.out.println("我是B区域产品!");

	}

}
测试类

/*
 * 测试类
 */
public class TestCase {

	@Test
	public void test() {
		Factory factory = new FruitAFactory();
		Fruit product = factory.createProduct();
		product.introducte();
		factory = new FruitBFactory();
		product = factory.createProduct();
		product.introducte();
	}

}


工厂模式的优缺点

  优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。

  缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。


和简单工厂模式的比较

   相对于简单工厂模式,它更好地符合开放-封闭原则.更加易于扩展,但扩展也相对麻烦.


闲言碎语

   相对于工厂模式的缺点,下一节的抽象工厂模式则会有更好地方案!







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值