23种设计模式——工厂模式
作用
实现了创建者和调用者分离
详细分类
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
核心本质
-
实例化对象不使用new,用工厂方法代替
-
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
1)简单工厂(静态工厂模式)
虽然某种程度上不符合设计原则,但实际用的最多
package com.mjh.factory.simple;
public interface Car {
void name();
}
package com.mjh.factory.simple;
public class AoDi implements Car {
@Override
public void name() {
System.out.println("奥迪");
}
}
package com.mjh.factory.simple;
public class TesLa implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.mjh.factory.simple;
//静态工厂模式
//增加一个新产品,如果你不修改代码,做不到的
//开闭原则
public class CarFactory {
public static Car getCar(String car){
//方法一
if(car.equals("奥迪")){
return new AoDi();
}else if(car.equals("特斯拉")){
return new TesLa();
}else {
return null;
}
}
//方法二
public static Car getAoDi(){
return new AoDi();
}
public static Car getTesLa(){
return new TesLa();
}
}
package com.mjh.factory.simple;
public class Impl {
public static void main(String[] args) {
/* Car car = new AoDi();
Car car1 = new TesLa(); 不用new创建了,只需创建一个工厂*/
//使用工厂创建
Car car = CarFactory.getCar("奥迪");
Car car1= CarFactory.getCar("特斯拉");
car.name();
car1.name();
}
}
2)工厂方法模式
不修改已有的类的前提下,通过增加新的工厂实现扩展
package com.mjh.factory.method;
public interface Car {
void name();
}
package com.mjh.factory.method;
public interface CarFactory {
Car getCar();
}
package com.mjh.factory.method;
public class AoDi implements Car {
@Override
public void name() {
System.out.println("奥迪");
}
}
package com.mjh.factory.method;
public class AoDiFactory implements CarFactory {
@Override
public Car getCar() {
return new AoDi();
}
}
package com.mjh.factory.method;
public class Impl {
public static void main(String[] args) {
Car car = new AoDiFactory().getCar();
Car car1 = new TesLaFactory().getCar();
car.name();
car1.name();
}
}
两种方式的对比
结构复杂度:简单工厂方法
代码复杂度:简单工厂方法
编程复杂度:简单工厂方法
管理上的复杂度:简单工厂方法
根据设计原则:工厂方法模式
根据实际业务:简单工厂模式