一、工厂模式简介二、简单工厂三、工厂方法模式四、抽象工厂模式五、简单工厂、工厂方法、抽象工厂的区别
一、工厂模式简介实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式
注意:简单工厂不属于23种设计模式
工厂模式优点
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 二、简单工厂
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。
如下列代码的createCar中就需要增加不同的汽车类型判断
public interface Car {
void run();
}
//比亚迪汽车
public class BydCar implements Car {
public void run() {
System.out.println("比亚迪汽车...");
}
}
public class JiLiCar implements Car {
public void run() {
System.out.println("吉利汽车...");
}
}
汽车厂(4S店)
public class CarFactory {
public static Car createCar(String name) {
// 判斷name是否為空..
if(StringUtils.isEmpty(name)){
return null ;
}
if (name.equals("比亚迪")){
return new BydCar();
}
if (name.equals("吉利")){
return new JiLiCar();
}
//其他或者未找到。
return null;
}
}
public class Client {
public static void main(String[] args) {
Car byd = CarFactory.createCar("吉利");
byd.run();
}
}
三、工厂方法模式
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
public interface Car {
public void run();
}
public class Aodi implements Car {
@Override
public void run() {
System.out.println("奥迪汽车");
}
}
public class JiLi implements Car {
@Override
public void run() {
System.out.println("吉利汽车");
}
}
public interface CarFactory {
Car createCar(String name);
}
public class AodiFactory implements CarFactory {
@Override
public Car createCar(String name) {
return new Aodi();
}
}
public class JiLiFactory implements CarFactory {
@Override
public Car createCar(String name) {
return new JiLi();
}
}
public class Client {
public static void main(String[] args) {
Car aodi = new AodiFactory().createCar("aodi");
Car jili = new JiLiFactory().createCar("jili");
aodi.run();//奥迪汽车
jili.run();//吉利汽车
}
}
四、抽象工厂模式
抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品
//发动机
public interface Engine {
void run();
}
class EngineA implements Engine{
public void run(){
System.out.println("发动机转速快");
}
}
class EngineB implements Engine{
public void run(){
System.out.println("发动机转速慢");
}
}
//座椅
public interface Chair {
void run();
}
class ChairA implements Chair{
@Override
public void run() {
System.out.println("自动加热");
}
}
class ChairB implements Chair{
@Override
public void run() {
System.out.println("不能加热");
}
}
//包装厂
public interface CarFactory {
//创建发动机
Engine createEngine();
//创建座椅
Chair createChair();
}
public class JiLiFactory implements CarFactory {
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Chair createChair() {
return new ChairA();
}
}
public class Client {
public static void main(String[] args) {
CarFactory carFactory = new JiLiFactory();
Engine engine = carFactory.createEngine();
Chair chair = carFactory.createChair();
engine.run();//发动机转速快
chair.run();//自动加热
}
}
五、简单工厂、工厂方法、抽象工厂的区别
简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)



