设计模式 (二) 工厂模式 Java

目录

一、案例引出

二、简单工厂模式

二、抽象工厂


工厂设计模式,顾名思义类似一家工厂来制造各种产品,目的在于提高代码的可扩展性。

一、案例引出

通过接口来实现一类产品的功能,如目前有飞机、轮船、汽车这类产品的实体类,同时需要具备移动的属性,此时我们优先想到的是通过接口来实现,例如:

插件Moveable接口来让各个需要该属性的对象实现,但这样做在业务结构简单是没问题,当业务结构复杂时,该方式的拓展性并不太好,没增加一种产品都需要去实现多个属性接口。

public interface Moveable {
    void go();
}
public class Car implements Moveable{
    @Override
    public void go() {
        System.out.println("car goes...");
    }
}
public class Plane implements Moveable{
    @Override
    public void go() {
        System.out.println("plane goes...");
    }
}
public class Ship implements Moveable{
    @Override
    public void go() {
        System.out.println("ship goes...");
    }
}

下面来看看工厂模式是如何实现的

二、简单工厂模式

简单工厂模式适用于产品种类单一的业务

通过简单工厂可以有效管理种类单一的产品

public class SimpleFactory {

    public static Moveable createCar(){
        //前至处理
        return new Car();
    }

    public static Moveable createShip(){
        //前至处理
        return new Ship();
    }

    public static Moveable createPlane(){
        //前至处理
        return new Plane();
    }

}

产品创建:当产品增加时直接在工厂里进行添加,拓展性较好

    public static void main(String[] args) {
        Moveable car = SimpleFactory.createCar();
        Moveable ship = SimpleFactory.createShip();
        Moveable plane = SimpleFactory.createPlane();
        car.go();
        ship.go();
        plane.go();
    }

二、抽象工厂

对于业务复杂,种类较多的产品时简单工厂并不能有效解决种类繁多管理的问题,由此引入抽象工厂进行管理:

我们可以创建一个抽象工厂来管理各个大类的产品:

public abstract class AbstractFactory {
    abstract Vehicle createVehicle();
    abstract Food createFood();
    abstract Weapon createWeapon();
}

分别创建各个大类的抽象类:

public abstract class Food {
    abstract void eat();
}
public abstract class Vehicle {
    abstract void go();
}
public abstract class Weapon {
    abstract void fight();
}

创建多种不同的工厂来加工不同的产品:都继承自AbastractFactory。产品都继承自类别抽象类。

public class ModernFactory extends AbstractFactory{
    @Override
    Vehicle createVehicle() {
        return new Car();
    }

    @Override
    Food createFood() {
        return new Bread();
    }

    @Override
    Weapon createWeapon() {
        return new AK47();
    }
}
public class AncientFactory extends AbstractFactory {
    @Override
    Vehicle createVehicle() {
        return new Ship();
    }

    @Override
    Food createFood() {
        return new Fish();
    }

    @Override
    Weapon createWeapon() {
        return new Arrow();
    }
}

以上演示为多个不同工厂的实例。

工厂生产产品:该设计模式也可借鉴单例模式来实现静态工厂。

    public static void main(String[] args) {
        AncientFactory ancientFactory = new AncientFactory();
        Food food = ancientFactory.createFood();
        food.eat();
    }

工厂模式生产和管理产品总结到此。

猜你喜欢

转载自blog.csdn.net/qq_50909707/article/details/128735790