工厂模式
作用:
-
实现了创建者和调用者的分离
-
详细分类
-
简单工厂模式
-
工厂方法模式
-
抽象工厂模式
-
OOP七大原则(工厂模式满足下面三个原则)
-
开闭原则:一个软件的实体应当对外扩展开放,对修改关闭
-
依赖倒转原则:要针对接口编程,不要针对实现编程
-
迪米特法则: 只与你直接的朋友通信,而避免和陌生人通信
核心本质:
-
实例化对象不使用new,用工厂方法代替
-
将选择实现类,创建统一管理和控制。从而将调用者跟我们实现类解耦
三种模式:
-
简单工厂模式
-
用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)
-
-
工厂方法模式
-
用来生产同一等级结构中的固定产品(支持增加任意产品)
-
-
抽象工厂模式
-
围绕一个超级工厂创建其他工厂。该工厂又称为其他工厂的工程。
-
简单工厂模式
Car.java
package com.doudou.note.factory.simple;
public interface Car {
void name();
}
Tesla .java
package com.doudou.note.factory.simple;
public class Tesla implements Car{
@Override
public void name(){
System.out.println("特斯拉");
}
}
WuLing .java
package com.doudou.note.factory.simple;
public class WuLing implements Car{
@Override
public void name(){
System.out.println("五菱宏光");
}
}
CarFactory.java
package com.doudou.note.factory.simple;
public class CarFactory {
public static Car getCar(String car){
if(car.equals("五菱")){
return new WuLing();
}else if(car.equals("特斯拉")){
return new Tesla();
}else {
return null;
}
}
}
Consumer.java
package com.doudou.note.factory.simple;
public class Consumer {
public static void main(String[] args) {
//了解接口, 还有所有的实现类
//1直接new
// Car car = new WuLing();
// Car car1 = new Tesla();
//
// car.name();
// car1.name();
//2.使用工厂创建
Car car = CarFactory.getCar("五菱");
Car car1 = CarFactory.getCar("特斯拉");
car.name();
car1.name();
}
}
输出结果
五菱宏光
特斯拉
Process finished with exit code 0
CarFactory.java
package com.doudou.note.factory.simple;
//静态工厂模式
//增加一个新的产品,如果你不修改代码,做不到!
//开闭原则
public class CarFactory {
//方法一
public static Car getCar(String car){
if(car.equals("五菱")){
return new WuLing();
}else if(car.equals("特斯拉")){
return new Tesla();
}else {
return null;
}
}
//方法二
public static Car getWuling(){
return new WuLing();
}
public static Car getTesla(){
return new Tesla();
}
}
B站学习网址【狂神说Java】通俗易懂的23种设计模式教学(停更)哔哩哔哩bilibili