设计模式-创建型模式-简单工厂模式详解

简单工厂模式

简介

简单工厂模式 : Simple Factory Pattern

是一种创建型设计模式 。
通过一个工厂类,封装了对象的创建逻辑。

客户端使用时不需要通过 new 的方式进行对象的创建,而是直接调用工厂类中的方法获取对象。

应用场景

场景介绍

复制代码
1、有一个 手机的抽象类,声明了 手机的基本属性 和 功能方法;
2、不同品牌的手机,继承了 该抽象类;
3、有一个手机工厂,可以根据不同的参数,创建对应品牌的手机,并返回。

类图

案例代码

案例代码,就是按照 UML 类图进行实现的代码。

抽象类Phone

java 复制代码
public abstract class Phone {

    protected String brandName; // 品牌名

    protected abstract void call(); // 抽象方法

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }
}

实现类PhoneXiaoMi

java 复制代码
public class PhoneXiaoMi extends Phone{
    @Override
    protected void call() {
        System.out.println(brandName + " : 正在打电话。。。");
    }
}

实现类PhoneHuaWei

java 复制代码
public class PhoneHuaWei extends Phone{
    @Override
    protected void call() {
        System.out.println(brandName + " 华为手机正在打电话......");
    }
}

工厂类 PhoneFactory

java 复制代码
public class PhoneFactory {
    public static Phone createPhone(String brand) {
        Phone phone = null;
        if ("XiaoMi".equals(brand)){
            phone = new PhoneXiaoMi();
            phone.setBrandName("小米14");
        }else if ("HuaWei".equals(brand)){
            phone = new PhoneHuaWei();
            phone.setBrandName("华为mate50");
        }
        return phone;
    }
}

测试类

通过工厂类中的方法,获取不同的对象。

java 复制代码
public class FactoryTest {
    public static void main(String[] args) {
        // 通过手机工厂获取一个 华为的手机
        Phone phone = PhoneFactory.createPhone("HuaWei");
        phone.call();
        System.out.println(" =========== ");
        
		// 通过手机工厂获取一个 小米的手机
        Phone xiaoMi = PhoneFactory.createPhone("XiaoMi");
        xiaoMi.call();
    }
}
复制代码
运行结果如下 :

华为mate50 华为手机正在打电话......
 =========== 
小米14 : 正在打电话。。。
相关推荐
Zane19943 天前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫4 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19944 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19945 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..5 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1506 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)6 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki7 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅667 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa7 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio