【Java】纯小白的三种工厂模式基础知识学习笔记

这篇具有很好参考价值的文章主要介绍了【Java】纯小白的三种工厂模式基础知识学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

工厂模式概念

在Java中,工厂模式是一种设计模式,用于创建对象而无需指定明确的类。工厂模式通过定义一个共同的接口或抽象类来创建对象,然后由工厂类根据特定条件或参数来实例化具体的对象。

工厂模式通常包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。

  1. 简单工厂模式(Simple Factory Pattern):简单工厂模式是最基本的工厂模式,它通过一个工厂类来创建对象。客户端通过传递参数给工厂类来获取特定类型的对象,而无需关心对象的创建过程。

  2. 工厂方法模式(Factory Method Pattern):工厂方法模式通过定义一个用于创建对象的接口,但将实际创建工作延迟到子类。每个子类都可以实现工厂接口以提供具体的对象实例化过程。

  3. 抽象工厂模式(Abstract Factory Pattern):抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。通过使用抽象工厂模式,可以实现一组对象的一致性创建,并且可以轻松地切换不同产品系列的实现。

工厂模式的优点包括:文章来源地址https://www.toymoban.com/news/detail-831288.html

  • 解耦了对象的创建和使用,使得客户端代码更加灵活和可扩展。
  • 隐藏了对象的具体实现细节,使得客户端只需关心接口或抽象类。

代码示例

简单工厂模式

// Shape 抽象类
public abstract class Shape {
    public abstract void draw();
}

// Circle 类
public class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle...");
    }
}

// Square 类
public class Square extends Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a square...");
    }
}

// Triangle 类
public class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a triangle...");
    }
}

// ShapeFactory 类
public class ShapeFactory {
    public static Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        } else if (shapeType.equalsIgnoreCase("TRIANGLE")) {
            return new Triangle();
        }
        return null;
    }
}

// 使用示例:
Shape circle = ShapeFactory.getShape("CIRCLE");
circle.draw(); // Drawing a circle...

Shape square = ShapeFactory.getShape("SQUARE");
square.draw(); // Drawing a square...

Shape triangle = ShapeFactory.getShape("TRIANGLE");
triangle.draw(); // Drawing a triangle...

工厂方法模式

// TV 抽象类
public abstract class TV {
    public abstract void play();
}

// SamsungTV 类
public class SamsungTV extends TV {
    @Override
    public void play() {
        System.out.println("Playing Samsung TV...");
    }
}

// LGTV 类
public class LGTV extends TV {
    @Override
    public void play() {
        System.out.println("Playing LG TV...");
    }
}

// TVFactory 接口
public interface TVFactory {
    TV createTV();
}

// SamsungTVFactory 类
public class SamsungTVFactory implements TVFactory {
    @Override
    public TV createTV() {
        return new SamsungTV();
    }
}

// LGTVFactory 类
public class LGTVFactory implements TVFactory {
    @Override
    public TV createTV() {
        return new LGTV();
    }
}

// 使用示例:
TVFactory samsungFactory = new SamsungTVFactory();
TV samsungTV = samsungFactory.createTV();
samsungTV.play(); // Playing Samsung TV...

TVFactory lgFactory = new LGTVFactory();
TV lgTV = lgFactory.createTV();
lgTV.play(); // Playing LG TV...

抽象工厂模式

// TV 抽象类
public abstract class TV {
    public abstract void play();
}

// SamsungTV 类
public class SamsungTV extends TV {
    @Override
    public void play() {
        System.out.println("Playing Samsung TV...");
    }
}

// LGTV 类
public class LGTV extends TV {
    @Override
    public void play() {
        System.out.println("Playing LG TV...");
    }
}

// Phone 抽象类
public abstract class Phone {
    public abstract void call();
}

// SamsungPhone 类
public class SamsungPhone extends Phone {
    @Override
    public void call() {
        System.out.println("Making a call with Samsung phone...");
    }
}

// LGPhone 类
public class LGPhone extends Phone {
    @Override
    public void call() {
        System.out.println("Making a call with LG phone...");
    }
}

// AbstractFactory 抽象类
public abstract class AbstractFactory {
    public abstract TV createTV();
    public abstract Phone createPhone();
}

// SamsungFactory 类
public class SamsungFactory extends AbstractFactory {
    @Override
    public TV createTV() {
        return new SamsungTV();
    }

    @Override
    public Phone createPhone() {
        return new SamsungPhone();
    }
}

// LGFactory 类
public class LGFactory extends AbstractFactory {
    @Override
    public TV createTV() {
        return new LGTV();
    }

    @Override
    public Phone createPhone() {
        return new LGPhone();
    }
}

// Client 类
public class Client {
    public static void main(String[] args) {
        AbstractFactory factory1 = new SamsungFactory();
        TV samsungTV = factory1.createTV();
        Phone samsungPhone = factory1.createPhone();
        samsungTV.play(); // Playing Samsung TV...
        samsungPhone.call(); // Making a call with Samsung phone...

        AbstractFactory factory2 = new LGFactory();
        TV lgTV = factory2.createTV();
        Phone lgPhone = factory2.createPhone();
        lgTV.play(); // Playing LG TV...
        lgPhone.call(); // Making a call with LG phone...
    }
}

到了这里,关于【Java】纯小白的三种工厂模式基础知识学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础】深入理解反射、反射的应用(工厂模式、代理模式)

    Java 反射机制是指在 运行时动态地获取和操作类的信息、调用对象的方法和访问对象的属性的能力 。通过反射,可以在程序运行时分析和修改类的结构、行为和状态。 Java 反射机制提供了以下功能: 获取类的信息:可以获取类的名称、修饰符、父类、实现的接口等。 创建对

    2024年02月09日
    浏览(42)
  • BCSP-玄子Share-Java框基础_工厂模式/代理模式

    软件设计中的 三十六计 是人们在长期的软件开发中的经验总结 是对某些特定问题的经过实践检验的特定解决方法 被广泛运用在 Java 框架技术中 3.1.1 设计模式的优点 设计模式是可复用的面向对象软件的基础 可以更加简单方便地复用成功的设计和体系结构 帮助开发者做出有

    2024年02月10日
    浏览(31)
  • 二十三种设计模式:工厂模式

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。工厂模式通过使用工厂方法来解决这个问题,该方法将对象的创建委托给子类来处理。 在工厂模式中,我们定义一个抽象工厂类,它包含一个抽象的工厂方法,该方法返回一个

    2024年02月07日
    浏览(40)
  • 二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道

    在软件开发中,我们经常面临着创建一系列相关或相互依赖的对象的挑战。在这个过程中,我们希望能够灵活地创建对象,又不与具体的类耦合。那么有没有一种设计模式可以帮助我们实现这一目标呢?答案是肯定的!让我带你进入抽象工厂模式的世界,一起探索创造无限可

    2024年02月07日
    浏览(37)
  • VMware的三种连接模式

    就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问

    2024年02月21日
    浏览(33)
  • 云服务的三种模式

    laaS(Infrastructure as a Service),即基础设施即服务。提供给消费者的服务是对所有计算基础设施的利用,包括处理CPU、内存、存储、网络和其他基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作

    2024年02月15日
    浏览(30)
  • Docker的三种网络模式

    Docker支持三种网络模式:Host模式、Bridge模式和None模式。它们各自适用于不同的场景和需求: Host模式:将容器加入到主机的网络栈中,使容器直接使用主机的网络接口和IP地址。Host模式适用于需要容器与主机共享网络资源或者容器需要快速访问主机网络服务的场景。 Bridge模

    2024年02月09日
    浏览(34)
  • Redis的三种集群模式(图解)

    主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能,但是从属节点只提供读取功能。 主从复制的数据同步过程如下: (1)首先主节点启动,然后从属节点启动,从属节点会连接主节点并发送SYNC命令以请求同步 (2)主节点收到SYNC命令之后,就会执行BGSA

    2024年03月12日
    浏览(38)
  • 云计算的三种服务模式

    1、IaaS(基础架构即服务) 它处在整个架构的最低端,它是通过虚拟化技术将服务器等计算平台和存储、网络资源一起打包,通过API接口的方式提供给用户。这样用户不用再租用机房,也不用自己维护服务器或交换机,只需要购买IaaS服务,就可以获得这些资源。 主要提供商:亚

    2024年02月16日
    浏览(33)
  • Kafka发送数据的三种模式

    在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率。 本文分享自华为云社区《kafka消息发送模式》,作者:dayu_dls。 在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提

    2024年02月15日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包