设计模式---工厂模式

本文介绍了工厂模式的基本概念及其在Java中的应用。工厂模式是一种创建型设计模式,它隐藏了对象的创建细节并提供了一种统一的方式来获取对象实例。文章通过一个具体的例子展示了如何使用工厂模式来创建不同类型的产品对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式之工厂模式

     是java中最常见的设计模式之一,属于创建类型模式,提供了最佳的创建对象的方法。在工厂模式中,我们不会对客户端暴露创建逻辑,而是通过一个共同的接口来指向创建的对象。

特点:创建过程在其子类执行,应用于产品结果复杂的场合

使用情况:在代码中需要在不同情况下创建不同实例时

有什么优缺点:

优点:1,创建对象时,调用者只需要知道其名称即可,

           2,扩展性高,如果需要增加一个产品,只需要扩展一个工厂类

           3,屏蔽产品的具体实现,调用者只需要关心产品接口

缺点:每增加一个产品时,都需要增加一个具体类和对象实现工厂,这样系统中的类就会成倍的增加,一定程度上增加了系统的复杂度,也增加了系统对具体类的依赖。

我们将创建一个 Car接口和实现 Car接口的实体类。下一步是定义工厂类 CarFactory

CarPatternDemo,我们的演示类使用 CarFactory 来获取 Car对象。它将向 CarFactory 传递信息(HONGQI/ BENCHI/ BAOMA),以便获取它所需对象的类型。

步骤1:创建对象接口

public interface Car {
    void performance();
}

 

步骤2:创建实现接口的实体类。

public class Hongqi implements Car{

    @Override
    public void performance() {
        System.out.println("This is hongqi performance");
    }
}
public class Benchi implements Car{

    @Override
    public void performance() {
        System.out.println("This is benchi performance");
    }
}

public class Baoma implements Car{

    @Override
    public void performance() {
        System.out.println("This is baoma performance");
    }
}

 

步骤3:创建一个工厂,生成基于给定信息的实体类的对象。 

public class CarFactory{
    public Car getCar(String carType){
        if(carType == null){
           return null;
        }
        if(carType.equalsIgnoreCase("HONGQI")){
            return new Hongqi();
        }else if(carType.equalsIgnoreCase("BENCHI")){
            return new Benchi();
        }else if(carType.equalsIgnoreCase("BAOMA")){
            return new Baoma();
        }
        return null;
    }
}

步骤4:

使用该工厂,通过传递类型信息来获取实体类的对象。

public class factoryCarTypeDemo{
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        //获取 Hongqi 的对象,并调用它的 performance 方法
        Car car1 = carFactory.getCar("HONGQI");
        car1.performance();

        //获取 Benchi 的对象,并调用它的 performance 方法
        Car car2 = carFactory.getCar("BENCHI");
        car2.performance();

        //获取 Baoma 的对象,并调用它的 performance 方法
        Car car3 = carFactory.getCar("BAOMA");
        car3.performance();
    }
}

输出结果:

This is hongqi performance
This is benchi performance
This is benchi performance

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值