首页 > 编程语言 >JAVA工厂模式

JAVA工厂模式

时间:2024-08-20 14:50:35浏览次数:8  
标签:JAVA create 模式 工厂 PhoneFactory new 手机 public

概要

  • 工厂模式提供了一种创建对象的方法,而无需指定要创建的具体类
  • 通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。

类型

  • 简单工厂模式:简单工厂模式不是一个正式的设计模式,但它是工厂模式的基础。它使用一个单独的工厂类来创建不同的对象,根据传入的参数决定创建哪种类型的对象。
  • 工厂方法模式:工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪个类。工厂方法将对象的创建延迟到子类。
  • 抽象工厂模式:抽象工厂模式提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

意图

定义一个创建对象的接口,让其子类决定实例化哪一个具体的类。工厂模式使对象的创建过程延迟到子类。

何时使用

当我们需要在不同条件下创建不同实例时。

关键代码

对象的创建过程在子类中实现。

应用实例

  • 汽车制造:客户需要一辆汽车,只需从工厂提货,而不需要关心汽车的制造过程及其内部实现。

优点

  • 调用者只需要知道对象的名称即可创建对象。
  • 扩展性高,如果需要增加新产品,只需扩展一个工厂类即可。
  • 屏蔽了产品的具体实现,调用者只关心产品的接口。

缺点

每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖。

代码示例

简单工厂模式

建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

  • 手机接口类
//手机接口类
public interface Phone {
    public void call();
}
  • 两个手机实现类
//手机实现类
public class Iphone implements Phone{
    @Override
    public void call(){
        System.out.println("用苹果手机打电话!");
    }
}
//手机实现类
public class Mphone implements Phone{
    @Override
    public void call(){
        System.out.println("用小米手机打电话!");
    }
}
  • 生产手机的工厂类
//生产手机的工厂类
public class PhoneFactory {
    public Phone create(String type){
        if (type.equals("Iphone")){
            return new Iphone();
        }else if (type.equals("Mphone")){
            return new Mphone();
        }else
            return null;
    }
}
  • 测试类
public class PhoneTest {

    public static final String Iphone = "Iphone";

    public static final String Mphone = "Mphone";

    public static void main(String[] args) {
        // 生产小米手机
        PhoneFactory factory1 = new PhoneFactory();
        factory1.create(Mphone).call();

        // 生产苹果手机
        PhoneFactory factory2 = new PhoneFactory();
        factory2.create(Iphone).call();
    }
}
  • 运行结果:
用小米手机打电话!
用苹果手机打电话!

工厂方法模式

对简单工厂模式的改进,使用一个工厂接口,创建多个工厂类,每个工厂创建对应的对象。一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。有利于代码的维护和扩展。

  • 工厂接口
public interface PhoneFactory_1 {
    public Phone create();
}
  • 小米手机工厂
public class MPhoneFactory_1 implements PhoneFactory_1{
    @Override
    public Phone create() {
        return new Mphone();
    }
}
  • 苹果手机工厂
public class IPhoneFactory_1 implements PhoneFactory_1{
    @Override
    public Phone create() {
        return new Iphone();
    }
}
  • 测试类
public class PhoneTest_1 {
    public static void main(String[] args) {
        // 生产苹果手机
        PhoneFactory_1 factory1 = new IPhoneFactory_1();
        factory1.create().call();

        // 生产小米手机
        PhoneFactory_1 factory2 = new MPhoneFactory_1();
        factory2.create().call();
    }
}
  • 运行结果
用苹果手机打电话!
用小米手机打电话!

标签:JAVA,create,模式,工厂,PhoneFactory,new,手机,public
From: https://www.cnblogs.com/shihongpin/p/18369406

相关文章

  • JAVA集合框架
    JAVA集合框架java集合框架位于java.util包中,所以当使用集合框架的时候需要进行导包一、集合框架设计目标该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。对一个集合的扩展和适应......
  • [Javascript] HTML Template Interpolation
    Thebasic interpolatefunctionwecancreate:functioninterpolate(str,params){letnames=Object.keys(params);//["title","description"]letvalues=Object.values(params);//["Hello","World"]......
  • 设计模式之cglib动态代理
    什么是动态代理呢?动态代理就是在java进程运行时,通过字节码技术,动态的生成某个类的代理类。在这个代理类中,我们可以做一些额外的操作,一方面仍然保持原有的方法的能力,另外一方面还增强了这些能力。听着是不是AOP有点像,没错,动态代理就是AOP的技术基石。在这之前我曾经写过两篇相关的......
  • Java中处理SocketException: Connection reset”异常的方法
    Java中处理SocketException:Connectionreset”异常的方法在Java编程中,有时候我们会遇到java.net.SocketException:Connectionreset异常。这个异常通常表示网络连接被重置或关闭,导致无法继续进行数据传输。在处理这个异常时,有几种常用的方法可以尝试。方法一:检查网络连接首......
  • 设计模式反模式:UML图示与案例分析
    设计模式反模式:UML图示与案例分析在软件开发中,设计模式是解决问题的有效工具,它们通过提供经过验证的、可复用的解决方案来优化软件设计。然而,当设计模式被误用、滥用或在不适当的情况下应用时,就会形成设计模式反模式(Anti-Patterns)。这些反模式不仅不能解决问题,反而可能引入......
  • 设计模式六大原则 —— 迪米特法则
    设计模式六大原则——迪米特法则在软件设计领域,设计模式六大原则是一组被广泛接受和应用的指导原则,旨在帮助开发者构建更加稳定、灵活、可维护和可扩展的软件系统。这六大原则分别是:单一职责原则(SingleResponsibilityPrinciple,SRP)、开闭原则(Open-ClosedPrinciple,O......
  • 设计模式六大原则中的里氏替换原则
    设计模式六大原则中的里氏替换原则(LiskovSubstitutionPrinciple,LSP)是面向对象设计中一个至关重要的原则,它定义了继承的基本原则和约束,确保子类能够透明地替换父类,而不会破坏系统的正确性和稳定性。以下是对里氏替换原则的详细阐述,包括其定义、应用、重要性、以及在实际......
  • Java计算机毕业设计移动购物管家app(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,极大地改变了人们的消费习惯。传统购物模式逐渐向线上转移,移动购物以其......
  • Java实现冒泡排序和插入排序算法
    冒泡排序算法步骤1、比较相邻的元素,如果第一个比第二个大,就交换它们两个;2、对每一对相邻元素作同样的比价,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;3、针对所有的元素重复以上的步骤,除了数组最后已经排好序的数组;4、重复步骤1~3,直到排序完成。代码实现pac......
  • 【Java】 方法引用与Lambda(快速上手)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1方法引用五、总结:一、前言Calculator::plus看到::好奇有什么用二、学习内容:方法引用......