欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工厂模式【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();
    }
}

总结:

简单工厂模式优缺点
    优点:客户端与产品的创建分离,客户端不需要知道产品创建的逻辑,只需要消费该产品即可。
    缺点:工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;还有当新增加产品都会修改工厂类,违背开闭原则
工厂方法模式优缺点
    优点:更符合开闭原则,增加一个产品类,则只需要实现其他具体的产品类和具体的工厂类即可;符合单一职责原则,每个工厂只负责生产对应的产品
    缺点:增加一个产品,就需要实现对应的具体工厂类和具体产品类;每个产品需要有对应的具体工厂和具体产品类

 

 

相关标签: Java小知识