设计模式-创建型模式-工厂模式
一、简单工厂模式
定义
定义一个工厂类,他可以根据不同的参数,创建不同的实例。众多实例之间有着共同的父类或者接口。实现此功能的方法一般为静态方法
优点
需要什么,仅仅需要传入一个或者多个参数,就能获取到实例,而无需知道其内部的实现过程
在简单工厂模式中,用于创建实例的方法通常为静态方法(static),因此简单工厂模式又被成为 静态工厂方法
uml 图

代码
package simple;
/**
* @author mrhy
* @date 2021/1/2 09:37
* Copyright (C), 2018-2021
*/
public class BaoShiJie implements Car {
@Override
public String name() {
return "我是保时捷";
}
}
package simple;
/**
* 兰博基尼
*
* @author mrhy
* @date 2021/1/2 09:38
* Copyright (C), 2018-2021
*/
public class LanBoJiNi implements Car {
@Override
public String name() {
return "我是兰博基尼";
}
}
package simple;
/**
* 汽车接口
*
* @author mrhy
* @date 2021/1/2 09:36
* Copyright (C), 2018-2021
*/
public interface Car {
String name();
}
package simple;
/**
* 汽车工厂
*
* @author mrhy
* @date 2021/1/2 09:39
* Copyright (C), 2018-2021
*/
public class CarFactory {
public static Car createCar(String name) {
if ("lanbo".equals(name)) {
return new LanBoJiNi();
} else if ("baoshijie".equals(name)) {
return new BaoShiJie();
} else {
throw new RuntimeException("未找到车");
}
}
public static void main(String[] args) {
Car lanbo = CarFactory.createCar("lanbo");
System.out.println(lanbo.name());
Car baoshijie = CarFactory.createCar("baoshijie");
System.out.println(baoshijie.name());
}
}
二、工厂方法模式
定义
工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品
优点
封装内部的实现过程,便于拓展
uml图

代码
package factorymethod;
/**
* 汽车接口
*
* @author mrhy
* @date 2021/1/2 09:36
* Copyright (C), 2018-2021
*/
public interface Car {
String name();
}
package factorymethod;
/**
* 工厂方法的抽象类
*
* @author mrhy
* @date 2021/1/3 10:15
* Copyright (C), 2018-2021
*/
public interface Factory {
Car newCar();
}
package factorymethod;
/**
* @author mrhy
* @date 2021/1/2 09:37
* Copyright (C), 2018-2021
*/
public class BaoShiJie implements Car {
@Override
public String name() {
return "我是保时捷";
}
}
package factorymethod;
import simple.CarFactory;
/**
* 汽车工厂
*
* @author mrhy
* @date 2021/1/2 09:39
* Copyright (C), 2018-2021
*/
public class BaoshijieCarFactory implements Factory {
@Override
public Car newCar() {
return new BaoShiJie();
}
}
package factorymethod;
/**
* @author mrhy
* @date 2021/1/3 10:21
* Copyright (C), 2018-2021
*/
public class LanboCarFactory implements Factory {
@Override
public Car newCar() {
return new LanBoJiNi();
}
public static void main(String[] args) {
Car baoshijie = new BaoshijieCarFactory().newCar();
System.out.println(baoshijie.name());
LanboCarFactory lanboCarFactory = new LanboCarFactory();
System.out.println(lanboCarFactory.newCar().name());
}
}
package factorymethod;
/**
* 兰博基尼
*
* @author mrhy
* @date 2021/1/2 09:38
* Copyright (C), 2018-2021
*/
public class LanBoJiNi implements Car {
@Override
public String name() {
return "我是兰博基尼";
}
}

浙公网安备 33010602011771号