Java 普通工厂模式

1、基本概念

      官方术语:先创建一个工厂类,对实现了同一个接口的不同实现类进行实例创建。

      大白话:说白了就是你想要哪个类跟工厂说就行,工厂把你想要的类创建好,然后你拿过来直接就能用。

      种类:工厂模式又可以分为四种:普通工厂模式工厂方法模式静态工厂模式抽象工厂模式

                 前三种工厂模式是违背开闭原则的,因为你每次新增一个业务,增加业务类的同时,工厂类里面也需要进行修改。

                 抽象工厂类没有违背开闭原则,因为每个业务都有自己对应的工厂,每次新增一个业务,也会去新增一个对应的工厂,大家互不影响。

      开闭原则:扩展开放,修改关闭。说白了就是你要新增一个业务的时候不要影响到之前的,不要我每次新增一个业务都要去原来的里面去修改。

      优点:在需要大量创建对象的前提下,用工厂模式扩展性好,可维护性强。

      缺点:代码稍微复杂,可读性稍微有点儿差。

2、具体实现

    「交通工具接口」

public interface Vehicle{

    void go();

}

「汽车类」实现交通工具接口

public class Car implements Vehicle{

    @Override
    public void go() {
        System.out.println("坐汽车...");
    }

}

「火车类」实现交通工具接口

public class Train implements Vehicle{

    @Override
    public void go() {
        System.out.println("坐火车...");
    }

} 

「飞机类」实现交通工具接口

public class Airplane implements Vehicle{

    @Override
    public void go() {
        System.out.println("坐飞机...");
    }

}

「工厂类」普通工厂模式、工厂方法模式、静态工厂模式 的工厂类

public class GoFactory{

    // 普通工厂模式
    public Vehicle produce(String type) {
        if("car".equals(type)) {
            return new Car();
        }
        if("train".equals(type)) {
            return new Train();
        }
        if("airplane".equals(type)) {
            return new Airplane();
        }
        return null;
    }

    // 工厂方法模式
    public Vehicle produceCar() {
        return new Car();
    }
    public Vehicle produceTrain() {
        return new Train();
    }    
    public Vehicle produceAirplane() {
        return new Airplane();
    } 

    // 静态工厂模式
    public static Vehicle produceCar() {
        return new Car();
    }   
    public static Vehicle produceTrain() {
        return new Train();
    }
    public static Vehicle produceAirplane() {
        return new Airplane();
    }

}

「工厂接口」抽象工厂模式的接口

public interface Provider{
    
    public Vehicle produce();    

}

「工厂接口」抽象工厂模式的工厂类

public class CarGoFactory implements Provider{

    @Override
    public Vehicle produce() {
        return new Car();
    }
}

public class TrainGoFactory implements Provider{

    @Override
    public Vehicle produce() {
        return new Train();
    }
}

public class AirplaneGoFactory implements Provider{
    
    @Override
    public Vehicle produce() {
        return new Airplane();
    }
}

「工厂测试类」模拟调用

public class GoFactoryTest{

    public static void main(String[] args) {
        // 1.普通工厂模式调用
        // 声明工厂类型引用工厂对象
        GoFactory goFactory = new GoFactory();
        // 调用工厂的生产方法
        Vehicle vehicle = goFactory.produce("train");
        // 使用对象模拟行为
        vehicle.go();

        // 2.工厂方法模式调用
        GoFactory goFactory = new GoFactory();
        Vehicle vehicle = goFactory.produceTrain();
        vehicle.go();

        // 3.静态工厂模式调用
        Vehicle vehicle = GoFactory.produceTrain();
        vehicle.go();
    
        // 4.抽象工厂模式调用
        Vehicle vehicle = new TrainGoFactory();
        vehicle.go();
    }
    
}

早期的单体架构的负责服务APP的网关调用就是通过工厂模式来搭建,一般是通过普通工厂模式创建的,因为需要传调用的服务类型,去获取想要调用的接口。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值