顶格博客:Java设计模式之工厂模式之简单工厂模式

3 篇文章 0 订阅
3 篇文章 0 订阅

本文首发于顶格博客 https://www.dgjava.com/archives/pattern-factory-1 转账请注明出处,更多文章请访问 顶格博客

工厂模式的诞生,源于创建对象的复杂性。在实际生产开发的过程中,我们通过 new 关键字来创建对象存在很多局限性,因为一个往往一个对象的创建包括多个步骤甚至多个嵌套的子对象。

前言

一开始,智能手机只需要满足基本的打电话、上网、发短信,拍照等基础功能即可。以华为为例,(假设)一开始只有华为一个品牌,那只有一个工厂生产华为手机。后来为了扩大影响力占据更多市场份额,华为衍生出了mate、荣耀、Nova等品牌,但还是原来的工厂生产这些不同品牌的手机,这个时候,这个工厂就形成了一个 简单工厂模式

后来随着软硬件技术的提升,这些基本功能都能很好的满足了,手机厂商为了提高产品的竞争力,势必要让手机具备更多更完善的功能。于是华为在处理器和摄像头上下功夫,自研处理器和强大的拍照技术,迅速让华为系列的手机有着很好的口碑。这个时候,一个工厂不够用了,就需要不同的工厂生产不同品牌的手机,于是就形成了 工厂方法模式

任何一个产品,都需要不断的推陈出新才能维持好的口碑以及用户群体。用户也需要通过不断升级换代,来获取更好的产品。于是不管是华为还是荣耀,都要让产品形成一个系列,持续的占据市场份额。这个时候,原来的工厂生产的是一个品牌不同系列的手机,于是,都是华为旗下的手机工厂,生产的是不同品牌不同系列的手机,就形成了 抽象工厂模式

至此,完成了共产模式的不同阶段的解释。下面我们通过代码来更为具体的描述什么叫 工厂模式


代码实现

简单工厂模式

定义手机父类对象

import lombok.Data;

/**
 * @Author: dgjava.com
 * @Date: 2020/5/1 5:41 PM
 * 顶层手机对象 phone
 */
@Data
public class Phone {
    
    protected String brand;
}

定义华为品牌手机

/**
 * @Author: dgjava.com
 * @Date: 2020/5/1 5:40 PM
 */
public class HuaWei extends Phone{
    public HuaWei(){
        this.brand="华为";
    }
}

定义荣耀品牌手机

/**
 * @Author: dgjava.com
 * @Date: 2020/5/1 5:40 PM
 */
public class RongYao extends Phone {
    
    public RongYao() {
        this.brand = "荣耀";
    }
}

定义手机工厂

/**
 * @Author: dgjava.com
 * @Date: 2020/5/1 5:41 PM
 */
public class PhoneFactory {

    public Phone createPhone(String brand) {
        switch (brand) {
            case "huawei":
                return new HuaWei();
            case "rongyao":
                return new RongYao();
            default:
                return new Phone();

        }

    }

}

测试代码

/**
 * @Author: dgjava.com
 * @Date: 2020/5/1 5:45 PM
 */
public class FactoryDeom {

    public static void main(String[] args) {
        PhoneFactory factory = new PhoneFactory();

        Phone phone = factory.createPhone("huawei");

        System.out.println(phone.getBrand());//华为
    }
}

定义

对于简单工厂模式而言,一个工厂类处于对产品实例化的中心位置。他知道每一个产品,并且决定哪一个产品类应该被实例化,如上述代码中的华为或荣耀。

  • 优点:允许客户端相对独立的创建产品,并且在系统引入新产品的过程中无须修改客户端,在一定程度上支持开闭原则。
  • 缺点:对开闭原则的支持力度不够,因为引入新产品虽然不用修改产品类,但是需要修改工厂类来支持新产品。

Java设计模式之工厂模式(工厂方法模式)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值