工厂模式【1.简单工厂模式】【2.工厂方法模式】
程序员文章站
2022-03-09 18:58:02
...
简单工厂模式
/**
* 简单工厂模式:一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口
*
* 简单工厂模式优缺点
* 优点:客户端与产品的创建分离,客户端不需要知道产品创建的逻辑,只需要消费该产品即可。
* 缺点:工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;
* 还有当新增加产品都会修改工厂类,违背开闭原则
*/
public class SimpleFactoryModel {
public static void main(String[] args) {
Car c = Factory.getCarInstance("Benz");
if (c != null) {
c.run();
c.stop();
} else {
System.out.println("造不了这种汽车。。。");
}
}
}
// 抽象产品类
abstract interface Car {
public void run();
public void stop();
}
// 具体实现类
class Benz implements Car {
public void run() {
System.out.println("Benz开始启动了。。。。。");
}
public void stop() {
System.out.println("Benz停车了。。。。。");
}
}
class Ford implements Car {
public void run() {
System.out.println("Ford开始启动了。。。");
}
public void stop() {
System.out.println("Ford停车了。。。。");
}
}
// 工厂类
class Factory {
public static Car getCarInstance(String type) {
Car c = null;
if ("Benz".equals(type)) {
c = new Benz();
}
if ("Ford".equals(type)) {
c = new Ford();
}
return c;
}
}
工厂方法模式
/**
* 工厂方法模式:有四个角色,抽象工厂模式,具体工厂模式,抽象产品模式,具体产品模式。
* 不再是由一个工厂类去实例化具体的产品,而是由抽象工厂的子类去实例化产品
*
* 工厂方法模式优缺点
* 优点:更符合开闭原则,增加一个产品类,则只需要实现其他具体的产品类和具体的工厂类即可;
* 符合单一职责原则,每个工厂只负责生产对应的产品
* 缺点:增加一个产品,就需要实现对应的具体工厂类和具体产品类;每个产品需要有对应的具体工厂和具体产品类
*/
public class FactoryMethod {
public static void main(String[] args) {
VehicleFactory factory = new BroomFactory();
Moveable m = factory.create();
m.run();
}
}
// 抽象产品角色
interface Moveable {
void run();
}
// 具体产品角色
class Plane implements Moveable {
@Override
public void run() {
System.out.println("plane....");
}
}
class Broom implements Moveable {
@Override
public void run() {
System.out.println("broom.....");
}
}
// 抽象工厂
abstract class VehicleFactory {
abstract Moveable create();
}
// 具体工厂
class PlaneFactory extends VehicleFactory {
public Moveable create() {
return new Plane();
}
}
class BroomFactory extends VehicleFactory {
public Moveable create() {
return new Broom();
}
}
总结:
简单工厂模式优缺点
优点:客户端与产品的创建分离,客户端不需要知道产品创建的逻辑,只需要消费该产品即可。
缺点:工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;还有当新增加产品都会修改工厂类,违背开闭原则
工厂方法模式优缺点
优点:更符合开闭原则,增加一个产品类,则只需要实现其他具体的产品类和具体的工厂类即可;符合单一职责原则,每个工厂只负责生产对应的产品
缺点:增加一个产品,就需要实现对应的具体工厂类和具体产品类;每个产品需要有对应的具体工厂和具体产品类