首页 > 其他分享 >工厂模式

工厂模式

时间:2024-08-19 19:07:31浏览次数:8  
标签:模式 public Phone Override new 工厂 class

工厂模式
核心本质:

实例化对象不使用new,用工厂方法创建对象
使用工厂统一管理对象的创建,将调用者跟实现类解耦
三种模式:

  1. 简单工厂模式
建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

优点是比较好理解,简单易操作。
缺点是类的创建依赖工厂类,如果想要拓展程序,必须对工厂类进行修改,这违反了设计模式的开闭原则(OCP),即对扩展开放,对修改关闭。

在这里插入图片描述

手机接口类:

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 Test {

    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();
    }
}

运行结果:

用小米手机打电话!
用苹果手机打电话!

2. 工厂方法模式

对简单工厂模式的改进,使用一个工厂接口,创建多个工厂类,每个工厂创建对应的对象。

在这里插入图片描述

工厂接口:

public interface PhoneFactory {
    public Phone create();
}

小米手机工厂:

public class MPhoneFactory implements PhoneFactory{
    @Override
    public Phone create() {
        return new MPhone();
    }
}

苹果手机工厂

public class IPhoneFactory implements PhoneFactory{
    @Override
    public Phone create() {
        return new IPhone();
    }
}

测试类:

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

        // 生产苹果手机
        PhoneFactory factory2 = new IPhoneFactory();
        factory2.create().call();
    }
}

用小米手机打电话!
用苹果手机打电话!

3. 抽象工厂模式

围绕一个超级工厂创建其他工厂,每个工厂可以生产不同类型的产品

抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。
从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。
将工厂抽象成两层,抽象工厂 和 具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂集合, 更利于代码的维护和扩展。

在这里插入图片描述

超级工厂:

public interface Factory {

    public Phone createPhone();

    public Book createBook();
}

苹果工厂:

public class AppleFactory implements Factory{
    @Override
    public Phone createPhone() {
        return new IPhone();
    }

    @Override
    public Book createBook() {
        return new MacBook();
    }
}

小米工厂:

public class XiaoMiFactory implements Factory{
    @Override
    public Phone createPhone() {
        return new MPhone();
    }

    @Override
    public Book createBook() {
        return new MiBook();
    }
}

电脑接口类:

public interface Book {
    public void play();
}

电脑接口的两个实现类:

public class MacBook implements Book{
    @Override
    public void play() {
        System.out.println("用苹果电脑打游戏!");
    }
}

public class MiBook implements Book{
    @Override
    public void play() {
        System.out.println("用小米电脑打游戏!");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        // 实例化苹果工厂,生产苹果手机和电脑
        Factory factory = new AppleFactory();
        factory.createBook().play();
        factory.createPhone().call();

        // 实例化小米工厂,生产小米手机和电脑
        Factory factory1 = new XiaoMiFactory();
        factory1.createBook().play();
        factory1.createPhone().call();
    }
}

标签:模式,public,Phone,Override,new,工厂,class
From: https://www.cnblogs.com/ZWJ7671277/p/18367909

相关文章

  • C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机
    一个简单的有限状态机可以有如下内容1.状态基类(定义基本状态的方法,如进入(Enter)、执行(Execute)和退出(Exit),同时可以在此声明需要被管理的对象)2.具体状态类(定义具体状态,如:跳跃,行走,待机,每个具体状态类继承自状态基类)3.管理状态类(负责管理状态的切换逻辑,确保在不同状态之间进行......
  • 设计模式六大原则(二)--开闭原则
    1.简介1.1.概述开闭原则(Open/ClosedPrinciple,简称OCP)是软件设计原则中的一个重要原则,它指出:“软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。”这意味着我们应该设计出这样的软件实体,它们可以在不改变原有代码的基础上进行扩展和修改。开闭原则的核心思想是将......
  • PyCharm社区版配置Django 项目Debug模式配置
    1、编辑Django项目运行配置 2、选择python,点击添加 3、设置相关参数 ......
  • MySQL 安装与配置教程:单机、主从复制与集群模式
    目录MySQL简介MySQL安装MySQL基础配置MySQL主从复制配置MySQL集群配置总结1.MySQL简介MySQL是一个广泛使用的关系型数据库管理系统,具有高性能、高可靠性和易用性等特点。它支持多种部署模式,包括单机模式、主从复制模式(用于高可用性和读写分离)以及集群模式(用于分......
  • Redis 安装与配置教程:单机、哨兵模式与集群模式
    目录Redis简介Redis安装Redis单机配置Redis哨兵模式配置Redis集群模式配置总结1.Redis简介Redis是一个开源的键值对存储系统,支持丰富的数据结构,如字符串、哈希、列表、集合等。它被广泛用于缓存、会话存储、实时分析等场景。Redis提供了多种部署模式,包括单机模......
  • redis 哨兵模式开启方案
    哨兵模式一、配置sentinel模式二、测试sentinel日志输出的状态信息环境准备准备三台系统为CentOS7的主机master:192.168.152.71slave1:192.168.152.72slave2:192.168.152.73.哨兵模式的介绍:Redis哨兵模式(RedisSentinel)用于提供高可用性和监控功能,主要......
  • uniapp页面分栏模式,如何设置,与开发
    目录配置分栏设置第一种,响应式,用媒体查询,在不同屏幕下的font-size的大小改变,不是很精准的等比例放大第二种,单位使用vw,vh,能够达到屏幕的自适应。(比较推荐使用)配置分栏设置第一种,响应式,用媒体查询,在不同屏幕下的font-size的大小改变,不是很精准的等比例放大第二种,单......
  • C++实现设计模式——Builder模式
    C++实现设计模式——Builder模式建造者模式定义建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品......
  • 在 C# 中处理 HttpClient 实例时,使用单例模式和 IHttpClientFactory,DNS缓存问题
    在C#中处理HttpClient实例时,使用单例模式和IHttpClientFactory都有各自的优缺点,尤其是在高并发情况下。以下是它们的对比及性能考虑:1.单例模式使用HttpClient优势:减少资源消耗:HttpClient是设计为复用的类,创建一个单例可以避免频繁创建和销毁HttpClient实例,从而减......
  • spring中bean的单例bean不是单例模式
    bean的单例不是单例模式。userService类型的bean可以有多个,单例bean是指name叫userService的bean只有一个。而单例模式,假如userService类是单例模式,那么用userService创建的对象就只有一个。这才叫单例模式。不然就不叫单例模式了。是为了防止创建多个对象造成的性能开销,所以限......