工厂模式分为简单工厂模式、工厂方法模式,它们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强了系统的扩展性。
简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。
public interface Car {
/**
* 汽车运行接口
*/
void run();
}
public class Benz implements Car{
@Override
public void run() {
System.out.println("奔驰 is running!");
}
}
public class Bike implements Car{
@Override
public void run() {
System.out.println("我只有自行车!");
}
}
public class Bmw implements Car{
@Override
public void run() {
System.out.println("宝马 is running!");
}
}
public class CarFactory {
public static Car getCar(String type) {
if("benz".equalsIgnoreCase(type)) {
return new Benz();
} else if("bmw".equalsIgnoreCase(type)) {
return new Bmw();
} else {
return new Bike();
}
}
}
public class Client {
public static void main(String[] args) {
Car bmw = CarFactory.getCar("bmw");
bmw.run();
Car benz = CarFactory.getCar("benz");
benz.run();
}
}
java开发要遵循开闭原则,如果有一天我们需要增加一个新的车,那么必须要修改CarFactory,这样会很麻烦,可以使用工厂方法模式。
public interface Factory {
/**
* 创建方法
* @return
*/
Car create();
}
public class BenzFactory implements Factory{
@Override
public Car create() {
return new Benz();
}
}
public class BikeFactory implements Factory{
@Override
public Car create() {
return new Bike();
}
}
public class BmwFactory implements Factory{
@Override
public Car create() {
return new Bmw();
}
}
public class Client {
public static void main(String[] args) {
BenzFactory benzFactory = new BenzFactory();
Car benz = benzFactory.create();
benz.run();
BmwFactory bmwFactory = new BmwFactory();
Car bmw = bmwFactory.create();
bmw.run();
}
}
优缺点说明
在 JDK 中的 Calendar 类中,使用了简单工厂模式

微信
支付宝