Java 基础(接口的应用:创建型设计模式-工厂设计模式 Factory)

接口的应用:工厂模式

工厂模式:实现了创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
其实设计模式和面向对象设计原则都是为了使得开发项目更加容易扩展和维护,解决方式就是一个"分工"。
社会的发展也是这样,分工越来越细。
原始社会的人:人什么都要会,自己种,自己打猎,自己织衣服,自己治病
现在的人:可以只会一样,其他都不会,只会 Java也能活,不会做饭,不会开车,不会...

工厂模式的分类:

简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)
工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)。

无工厂模式

Client01.java

复制代码
package com.klvchen.java1;

interface Car{
    void run();
}

class Audi implements Car{

    @Override
    public void run() {
        System.out.println("奥迪在跑");
    }
    
}

class BYD implements Car{

    @Override
    public void run() {
        System.out.println("比亚迪在跑");
    }
    
}

public class Client01 {

    public static void main(String[] args) {
        Car a = new Audi();
        Car b = new BYD();
        a.run();
        b.run();
    }
}
复制代码

简单工厂模式

简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的实例对象。
缺点:对于增加新产品,不修改代码的话,是无法扩展的。违反了开闭原则(对扩展开放;对修改封闭)。

Client02.java

复制代码
package com.klvchen.java1;

interface Car2{
    void run();
}

class Audi2 implements Car2{

    @Override
    public void run() {
        System.out.println("奥迪在跑");
    }
    
}

class BYD2 implements Car2{

    @Override
    public void run() {
        System.out.println("比亚迪在跑");        
    }
    
}

class CarFactory{
    //方式一
    public static Car2 getCar(String type) {
        if("奥迪".equals(type)) {
            return new Audi2();
        }else if ("比亚迪".equals(type)) {
            return new BYD2();
        } else {
            return null;
        }
    }
}

public class Client02 {
    public static void main(String[] args) {
        Car2 a = CarFactory.getCar("奥迪");
        a.run();
        Car2 b = CarFactory.getCar("比亚迪");
        b.run();
        
    }
}
复制代码

工厂方法模式

为了避免简单工厂模式的缺点,不完全满足 OCP (对扩展开放,对修改关闭)。工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立的模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。

Client03.java

复制代码
package com.klvchen.java1;

interface Car3{
    void run();
}

class Audi3 implements Car3{

    @Override
    public void run() {
        System.out.println("奥迪在跑");        
    }
}

class BYD3 implements Car3{

    @Override
    public void run() {
        System.out.println("比亚迪在跑");        
    }
    
}

interface Factory{
    Car3 getCar();
}

class AudiFactory3 implements Factory{

    @Override
    public Audi3 getCar() {
        return new Audi3();
    }
    
}

class BydFactory3 implements Factory{

    @Override
    public BYD3 getCar() {
        return new BYD3();
    }
    
}

public class Client03 {
    
    public static void main(String[] args) {
        Car3 a = new AudiFactory3().getCar();
        Car3 b = new BydFactory3().getCar();
        a.run();
        b.run();
    }

}
复制代码

抽象工厂模式

抽象工厂模式和工方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。
而且使用抽象工厂模式还要满足一下条件:
1)系统中有多个产品族,而系统一次只可能消费其中一族产品。
2)同属于同一个产品族的产品以其使用。

posted @   民宿  阅读(52)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示