- 什么是工厂模式
- 工厂模式的例子
- 工厂模式的优缺点
- 和简单工厂模式的比较
- 闲言碎语
什么是工厂模式
接着简单工厂模式的那个情景,随个那个老板的生意越做越好,他那个小商铺的规模也扩大了好几倍.来他这买水果的客人越来越多,他发现自己一个人已经忙不过来了.于是,他就花钱雇了两个员工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();
}
}
工厂模式的优缺点
优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。
缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。
和简单工厂模式的比较
相对于简单工厂模式,它更好地符合开放-封闭原则.更加易于扩展,但扩展也相对麻烦.
闲言碎语
相对于工厂模式的缺点,下一节的抽象工厂模式则会有更好地方案!