简单工厂模式(静态工厂模式)
简单工厂模式:定义一个工厂类,在该类的统一静态方法中根据不同的参数实例化不同的对象。
UML图:

手机抽象类,抽象不同的产品
1 2 3
| public interface AbstractPhone { void make(); }
|
手机实现类
1 2 3 4 5 6 7 8 9 10 11 12
| public class HuaweiPhone implements AbstractPhone { public HuaweiPhone() { this.make(); }
@Override public void make() { System.out.println("制造华为手机"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class MiPhone implements AbstractPhone {
public MiPhone() { this.make(); }
@Override public void make() { System.out.println("生产小米手机"); } }
|
简单工厂类
1 2 3 4 5 6 7 8 9 10
| public class PhoneFactory { public static AbstractPhone getPhone(String phoneType) { if ("MiPhone".equals(phoneType)) { return new MiPhone(); } else if ("HuaweiPhone".equals(phoneType)) { return new HuaweiPhone(); } return null; } }
|
测试类
1 2 3 4 5 6 7 8 9 10 11 12
| public class FactoryPattern {
public static void main(String[] args) { AbstractPhone miPhone = PhoneFactory.getPhone("MiPhone"); AbstractPhone huaweiPhone = PhoneFactory.getPhone("HuaweiPhone"); }
}
|
Cons&Pros
工厂方法模式
工厂方法模式是对简单工厂模式的进一步解耦,因为在工厂模式中一个工厂子类对应一个产品子类。

工厂接口和产品接口
1 2 3 4 5
| package javatest.pattern.factorymethod;
public interface AbstractFactory { public AbstractPhone createPhone(); }
|
1 2 3 4 5
| package javatest.pattern.factorymethod;
public interface AbstractPhone { public void make(); }
|
具体工厂类
1 2 3 4 5 6 7
| public class HuaweiFactory implements AbstractFactory{ @Override public AbstractPhone createPhone() { return new HuaweiPhone(); } }
|
1 2 3 4 5 6 7
| public class MiFactory implements AbstractFactory { @Override public AbstractPhone createPhone() { return new MiPhone(); } }
|
具体产品类
1 2 3 4 5 6 7 8 9 10
| public class HuaweiPhone implements AbstractPhone { public HuaweiPhone() { this.make(); } @Override public void make() { System.out.println("制造华为手机"); } }
|
1 2 3 4 5 6 7 8 9 10
| public class MiPhone implements AbstractPhone { public MiPhone() { this.make(); } @Override public void make() { System.out.println("生产小米手机"); } }
|
Cons&Pros
1- 工厂方法模式,在简单工厂模式的基础上进一步解耦,将各个产品的工厂单独继承一个抽象工厂类,把统一的工厂方法分解到了各个对应产品的工厂中。如此一来,如果需要添加一个产品只需要新继承一个类,用它类进行创建对象就可以。不需要修改其他代码。
2- 工厂方法模式,它克服了简单工厂模式违背开-闭原则,有保持了面向对象的封装性。
工厂方法模式的缺点是每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。
抽象工厂模式