23设计模式之 --------- 工厂模式(一)

简介: 23设计模式之 --------- 工厂模式(一)

💛1.工厂模式简介


有三种工厂的模式:


1.1简单工厂模式:



常见常见消费者需要什么就去new 什么:


简单工厂模式实现了不需要直接new而是直接联系工厂即可


具体代码实现如下:


Car

public interface Car {
void name();
}


Tesla


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


WuLing

public class WuLing implements Car{
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}


工厂代码

//此模式如果持续增加的话 会影响到开闭模式(简单工厂也可以称之为静态工厂模式)
public class CarFactory {
    public static Car getConfig(String car){
        //方法一
        if (car.equals("五菱")){
            return new WuLing();
        }if (car.equals("特")){
            return new Tesla();
        }else {
            return null;
        }
    }
    //方法二
public static Car getWuling(String WuLing){
        return new WuLing();
}
public static Car getTesla(String Tesla){
        return new Tesla();
    }
}


控制台 Consumer

public class Consumer {
    public static void main(String[] args) {
        //1.普通方法
        Car  wuLing = new WuLing();
        Car tesla = new Tesla();
        wuLing.name();
        tesla.name();
     //   ------------------------
     //2.工厂模式
    Car le = CarFactory.getConfig("特");
    Car les = CarFactory.getConfig("五菱");
    le.name();
    les.name();
    }
}


简单模式直接去new对象了然后获取他们的值展示出啦的;

工厂模式而是直接去调用工厂的代码,进行实现

他的弊端是:影响了开闭原则不应该在新增的时候去修改工厂的代码;




1.2工厂方法模式

WuLing

public class WuLing implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}


WuLingFactory

public class WuLingFactory implements CarFactory{
    @Override
    public Car getcar() {
        return new WuLing();
    }
}


Tesla

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


TeslaFactory

public class TeslaFactory implements CarFactory {
    @Override
    public Car getcar() {
        return new Tesla();
    }
}
```java
**BaoMa** 
```java
public class BaoMa implements Car {
    @Override
    public void name() {
        System.out.println("宝马骑骑车");
    }
}


BaoMaFactory

public class BaoMaFactory implements CarFactory {
    @Override
    public Car getcar() {
        return new BaoMa();
    }
}


Car 每个车都会实现这个方法

//工厂模式
public interface Car {
void name();
}


CarFactory 每个车的方法都会实现这个方法

//方法工厂方法模式
public interface CarFactory {
    Car getcar();
}


Consumer 控制台调用方法实现

public class Consumer {
    public static void main(String[] args) {
        //1.工厂方法
         Car car = new WuLingFactory().getcar();
         Car car2 = new TeslaFactory().getcar();
        Car car3 = new BaoMaFactory().getcar();
         car.name();
         car2.name();
         car3.name();
    }
}


运行结果如下:


(他完美的避免了开闭原则,但是他的实现类方法会不断增多也是一种不友好的用户的体验)


我们来看下实现图来更好的对他进行一个理解


两接口:一个代表车,一个代表车仓;每新增一种车就会新增一个车仓;


我们可以对比分析下:


简单工厂和方法工厂的对比

结构复杂度:简单工厂模式
代码复杂度:简单工厂模式
编程复杂度:简单工厂模式
管理复杂度:简单工厂模式
根据设计原则:工厂方法模式比较好(不会扰乱程序)
根据实际业务:简单工厂模式
相关文章
|
10月前
|
设计模式 安全 Java
23设计模式之 --------- 单例模式(二)
23设计模式之 --------- 单例模式(二)
29 0
|
10月前
|
设计模式
23设计模式之 --------- 什么是设计模式?
23设计模式之 --------- 什么是设计模式?
54 0
|
10月前
|
设计模式
设计模式-----创建型模式
设计模式-----创建型模式
41 0
|
10月前
|
设计模式 存储
设计模式-----结构型模式
设计模式-----结构型模式
46 0
|
10月前
|
设计模式 算法 Java
23设计模式之 --------- 建造者模式
23设计模式之 --------- 建造者模式
68 0
|
10月前
|
设计模式 缓存 安全
23设计模式之 --------- 原型模式
23设计模式之 --------- 原型模式
55 0
|
10月前
|
设计模式 网络架构
23设计模式之 --------- 工厂模式(二)
23设计模式之 --------- 工厂模式(二)
51 0
|
10月前
|
设计模式 Java Linux
23设计模式之 ---------适配器模式
23设计模式之 ---------适配器模式
60 0
|
10月前
|
设计模式 安全 Java
23设计模式之 ---------代理模式
23设计模式之 ---------代理模式
34 0
|
10月前
|
设计模式 SQL 缓存
23设计模式之 --------- 单例模式(一)
23设计模式之 --------- 单例模式(一)
91 0