简介

说明

        本文用示例介绍Java中工厂模式的用法。

需求

客户想获得一辆车。

原始方法:new一辆车

优点

写起来最简单。代码量最少。

缺点

若Car的构造参数很多,用户要自己写参数,就会特别麻烦。

所需的类

Java设计模式--工厂模式--使用/详解/实例_ide

主类Consumer

package org.example.traditional;

import org.example.traditional.car.Car;
import org.example.traditional.car.Tesla;
import org.example.traditional.car.WuLing;

public class Consumer {
public static void main(String[] args) {
Car wuLing = new WuLing();
Car tesla = new Tesla();

wuLing.name();
tesla.name();
}
}

Car 

接口

package org.example.traditional.car;

public interface Car {
void name();
}

实现类

package org.example.traditional.car;

public class WuLing implements Car {

@Override
public void name() {
System.out.println("五菱");
}
}
package org.example.traditional.car;

public class Tesla implements Car {

@Override
public void name() {
System.out.println("特斯拉");
}
}

测试

五菱
特斯拉

简单工厂模式

简介

针对上边“原始方法:new一辆车”的缺点,可使用简单工厂来解决。核心:加一层

加一层:使用工厂来包一层,将构造封装起来。

优点

用户不需要再去new一个Car,只需从工厂拿现成的。

缺点

若增加一类车,比如:大众,除了要增加Car的实现类之外,还要修改工厂类。违反开闭原则

所需的类 

Java设计模式--工厂模式--使用/详解/实例_ide_02

主类Consumer

package org.example.simple;

import org.example.simple.car.Car;
import org.example.simple.factory.CarFactory;

public class Consumer {
public static void main(String[] args) {
Car wuLing = CarFactory.getCar("五菱");
Car tesla = CarFactory.getCar("特斯拉");

wuLing.name();
tesla.name();
}
}

工厂类

package org.example.simple.factory;

import org.example.simple.car.Car;
import org.example.simple.car.Tesla;
import org.example.simple.car.WuLing;

public class CarFactory {
public static Car getCar(String car) {
switch (car) {
case "五菱":
return new WuLing();
case "特斯拉":
return new Tesla();
default:
return null;
}
}
}

Car类

接口

package org.example.simple.car;

public interface Car {
void name();
}

实现类

package org.example.simple.car;

public class WuLing implements Car {

@Override
public void name() {
System.out.println("五菱");
}
}
package org.example.simple.car;

public class Tesla implements Car {

@Override
public void name() {
System.out.println("特斯拉");
}
}

测试

五菱
特斯拉

工厂方法模式

简介

针对上边“简单工厂”的缺点,可使用工厂方法模式来解决。核心:加一层

加一层:写一个工厂类接口,具体工厂类去实现它。

优点

若增加一类车,比如:大众,增加Car的实现类、增加工厂类。不违反开闭原则(只增加即可,无需修改)

缺点

略麻烦。

所需的类

Java设计模式--工厂模式--使用/详解/实例_开发语言_03

主类(Consumer) 

package org.example.method;

import org.example.method.car.Car;
import org.example.method.factory.TeslaFactory;
import org.example.method.factory.WuLingFactory;

public class Consumer {
public static void main(String[] args) {
Car wuLing = new WuLingFactory().getCar();
Car tesla = new TeslaFactory().getCar();
wuLing.name();
tesla.name();
}
}

工厂类

接口

package org.example.method.factory;

import org.example.method.car.Car;

public interface CarFactory {
Car getCar();
}

实现类

package org.example.method.factory;

import org.example.method.car.Car;
import org.example.method.car.WuLing;

public class WuLingFactory implements CarFactory{
@Override
public Car getCar() {
return new WuLing();
}
}
package org.example.method.factory;

import org.example.method.car.Car;
import org.example.method.car.Tesla;

public class TeslaFactory implements CarFactory{
@Override
public Car getCar() {
return new Tesla();
}
}

Car类

接口

package org.example.method.car;

public interface Car {
void name();
}

实现类

package org.example.method.car;

public class WuLing implements Car {

@Override
public void name() {
System.out.println("五菱");
}
}
package org.example.method.car;

public class Tesla implements Car {

@Override
public void name() {
System.out.println("特斯拉");
}
}

测试

五菱
特斯拉

其他网址

​【狂神说Java】通俗易懂的23种设计模式教学(停更)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​