设计模式-工厂模式

本文介绍了工厂模式,一种常见的设计模式,旨在通过接口定义创建对象的方法,将创建过程封装在子类中,降低耦合度。文中通过实例展示了如何创建手机品牌的工厂,定义了Phone接口,Iphone和HuaWei实现类,以及Factory工厂类,说明如何根据参数创建不同品牌的手机对象。
摘要由CSDN通过智能技术生成

1、工厂模式简介

  工厂模式(Factory Pattern)是最常见的设计模式,该模式属于创建型模式,它提供了一种简单、快速、高效且安全创建对象的方式。工厂模式在接口中定义了创建对象的方法,而将创建对象的具体过程在子类中实现,用户只需通过接口创建需要的对象即可,不用关注对象的具体创建过程。同时,不同的子类可可根据需求灵活实现创建对象的不同方法。

  通俗地讲,工厂模式的本质就是用工厂方法代替new操作创建一个实例化对象的方式,以提供一种可方便地创建有同种类型接口的产品的复杂对象的方式

  如下代码通过new关键字实例化类Class的一个实例class,但如果class类在实例化时需要一些初始化参数,而这些参数需要其他类的信息,则直接通过new关键字实例化对象会增加代码的耦合度,不利于维护,因此需要通过工厂模式将创建实例和使用实例分开。将创建实例化对象的过程封装到工厂方法中,我们在使用时直接通过调用工厂来获取,不需要关心具体的实现过程:

Class class=new Class();

  以创建手机为例,假设手机的品牌有华为和苹果两种类型,我们要实现的时根据不同的传入参数实例化不同的手机。
在这里插入图片描述

2、工厂模式实现

  定义接口:

public interface Phone {
    String brand();
}

  以上代码定义了一个Phone接口,并在接口中定义了brand(),用于返回手机的品牌。

  定义实现类:

public class Iphone implements Phone {
    @Override
    public String brand() {
        return "this is an apple phone";
    }
}
public class HuaWei implements Phone {
    @Override
    public String brand() {
        return "this is a huawei phone";
    }
}

  以上代码定义了两个Phone的实现类Iphone和HuaWei来表示两个品牌的手机,两个品跑的手机通过实现brand()打印自己的商标。

  定义工厂类

public class Factory {
    public Phone createPhone(String phoneName){
        if("HuaWei".equals(phoneName)){
            return new HuaWei();
        }else if("Apple".equals(phoneName)){
            return new Iphone();
        }else{
            return null;
        }
    }
}

  以上代码定义了名为Factory的工厂类,工厂类有一个方法createPhone(),用于根据不同的参数实例化不同品牌的手机类并返回。在createPhone()的参数为"HuaWei"时,工厂类为我们实例化一个HuaWei类的实例并返回;在createPhone()的参数为"Apple"时,工厂类为我们实例化一个Iphone类的实例并返回。这样便实现了工厂类根据不同的参数创建不同的实例,对调用者来说屏蔽了实例化的细节。

  使用工厂模式:

//使用工厂模式
public static void main(String[] args) {
    Factory factory = new Factory();
    Phone huaWei = factory.createPhone("HuaWei");
    Phone iphone = factory.createPhone("Apple");
    System.out.println(huaWei.brand());
    System.out.println(iphone.brand());
}

  以上代码定义了一个Factory的实例,并调用createPhone根据不同的参数创建了名为huawei的实例和名为iphone的实例,分别调用其brand()打印不同的品牌信息,运行结果如下:

image-20230611233228799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别团等shy哥发育

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值