5种Java经典创建型模式详解

以下是使用标准的Markdown格式文本,详细讲解5种Java经典创建型模式的完整攻略:

5种Java经典创建型模式详解

1. 单例模式(Singleton Pattern)

单例模式用于确保一个类只有一个实例,并提供全局访问点。以下是一个示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // 私有构造函数
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

在上述示例中,通过私有构造函数和静态方法getInstance()来控制实例的创建和访问。

2. 工厂模式(Factory Pattern)

工厂模式用于创建对象,将对象的创建逻辑封装在工厂类中。以下是一个示例:

public interface Shape {
    void draw();
}

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

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println(\"Drawing a rectangle\");
    }
}

public class ShapeFactory {
    public Shape createShape(String type) {
        if (type.equalsIgnoreCase(\"circle\")) {
            return new Circle();
        } else if (type.equalsIgnoreCase(\"rectangle\")) {
            return new Rectangle();
        }
        return null;
    }
}

在上述示例中,通过工厂类ShapeFactorycreateShape()方法根据参数类型来创建不同的形状对象。

3. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式用于创建一组相关或依赖的对象,将对象的创建逻辑封装在抽象工厂类中。以下是一个示例:

public interface Shape {
    void draw();
}

public interface Color {
    void fill();
}

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

public class Red implements Color {
    @Override
    public void fill() {
        System.out.println(\"Filling with red color\");
    }
}

public interface AbstractFactory {
    Shape createShape();
    Color createColor();
}

public class ShapeFactory implements AbstractFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }

    @Override
    public Color createColor() {
        return null;
    }
}

public class ColorFactory implements AbstractFactory {
    @Override
    public Shape createShape() {
        return null;
    }

    @Override
    public Color createColor() {
        return new Red();
    }
}

在上述示例中,通过抽象工厂类AbstractFactory和具体工厂类ShapeFactoryColorFactory来创建形状和颜色对象。

4. 建造者模式(Builder Pattern)

建造者模式用于创建复杂对象,将对象的构建过程分解为多个步骤,并提供一个指导者来控制构建过程。以下是一个示例:

public class Product {
    private String part1;
    private String part2;

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

    public void show() {
        System.out.println(\"Part 1: \" + part1);
        System.out.println(\"Part 2: \" + part2);
    }
}

public interface Builder {
    void buildPart1();
    void buildPart2();
    Product getResult();
}

public class ConcreteBuilder implements Builder {
    private Product product;

    public ConcreteBuilder() {
        product = new Product();
    }

    @Override
    public void buildPart1() {
        product.setPart1(\"Part 1\");
    }

    @Override
    public void buildPart2() {
        product.setPart2(\"Part 2\");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

public class Director {
    public void construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
    }
}

在上述示例中,通过建造者接口Builder和具体建造者类ConcreteBuilder来构建产品对象,指导者类Director控制构建过程。

5. 原型模式(Prototype Pattern)

原型模式用于创建对象的克隆副本,通过复制现有对象的属性来创建新对象。以下是一个示例:

public abstract class Shape implements Cloneable {
    private String id;
    protected String type;

    public abstract void draw();

    public String getType() {
        return type;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

public class Circle extends Shape {
    public Circle() {
        type = \"Circle\";
    }

    @Override
    public void draw() {
        System.out.println(\"Drawing a circle\");
    }
}

public class Rectangle extends Shape {
    public Rectangle() {
        type = \"Rectangle\";
    }

    @Override
    public void draw() {
        System.out.println(\"Drawing a rectangle\");
    }
}

public class ShapeCache {
    private static Map<String, Shape> shapeMap = new HashMap<>();

    public static Shape getShape(String id) {
        Shape cachedShape = shapeMap.get(id);
        return (Shape) cachedShape.clone();
    }

    public static void loadCache() {
        Circle circle = new Circle();
        circle.setId(\"1\");
        shapeMap.put(circle.getId(), circle);

        Rectangle rectangle = new Rectangle();
        rectangle.setId(\"2\");
        shapeMap.put(rectangle.getId(), rectangle);
    }
}

在上述示例中,通过原型模式和clone()方法来创建形状对象的克隆副本。

以上是关于5种Java经典创建型模式的详细攻略。通过单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式,我们可以灵活地创建和管理对象的创建过程。根据示例代码进行定制和优化,以满足您的具体需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:5种Java经典创建型模式详解 - Python技术站

(0)
上一篇 2023年10月14日
下一篇 2023年10月14日

相关文章

  • Java利用Request请求获取IP地址的方法详解

    Java利用Request请求获取IP地址的方法详解 在Java中,我们可以使用Request请求来获取客户端的IP地址。下面是一种常用的方法来实现这个功能。 1. 获取HttpServletRequest对象 首先,我们需要获取HttpServletRequest对象,该对象包含了客户端请求的信息。可以通过在方法参数中添加HttpServletReques…

    other 2023年7月30日
    00
  • C++ 类中有虚函数(虚函数表)时 内存分布详解

    下面是关于“C++ 类中有虚函数(虚函数表)时 内存分布详解”的完整攻略: 1. 什么是虚函数 在 C++ 中,虚函数是指在基类中使用 virtual 关键字声明的成员函数。虚函数的特点是,在继承关系中,它能够被子类重写并被动态绑定。 2. 虚函数表 为了实现虚函数的动态绑定,编译器会在包含虚函数的类中生成一个虚函数表(Virtual Table,VTABL…

    other 2023年6月27日
    00
  • win10预览版10147自制中文iso镜像下载地址

    Win10预览版10147自制中文ISO镜像下载攻略 简介 Win10预览版10147是微软的操作系统的一个早期版本,该版本包含了一些新的功能和改进。本攻略将详细介绍如何下载自制的中文ISO镜像文件。 步骤 步骤一:准备工作 在开始下载之前,确保你已经满足以下要求:- 一台可靠的互联网连接的计算机。- 足够的存储空间来保存ISO镜像文件。 步骤二:查找下载地…

    other 2023年8月4日
    00
  • iOS 15/iPadOS 15 开发者预览版 Beta3 正式发布(附更新内容)

    iOS 15/iPadOS 15 开发者预览版 Beta3 正式发布(附更新内容) 最新消息:苹果公司于6月23日正式推送了 iOS 15/iPadOS 15 开发者预览版 Beta3,开发者可以在苹果开发者网站下载该版本进行测试。 更新内容 iOS 15/iPadOS 15 开发者预览版 Beta3 主要包含以下更新内容: 1. 新增功能 人像模式下拍摄照…

    other 2023年6月26日
    00
  • 在win7系统下如何修改文件后缀名?win7修改文件后缀名html方法

    在Win7系统下,你可以通过以下步骤修改文件后缀名: 首先,找到你想要修改后缀名的文件。可以通过资源管理器或者桌面上的快捷方式来找到文件。 右键点击该文件,然后选择“重命名”选项。你也可以选中文件,然后按下F2键来进行重命名。 在文件名中,找到文件名和后缀名之间的点(.),将点后面的文字删除。 输入你想要的新的后缀名。确保后缀名是合法的,并且与文件的内容相符…

    other 2023年8月5日
    00
  • android安卓打包apk几种方法 任你选择!

    以下是关于“android安卓打包apk几种方法任你选择!”的完整攻略,包括安卓打包apk的基本知识、几种打包apk的方法和两个示例。 安卓打包的基本知识 APK是Android应用程序的装包,它包含了用程序的所有文件和资源。在开发Android应用程序时,需要将应用程序打包成APK文件,便在Android设备上安装运行。 几种打包apk的方法 是几种打包a…

    other 2023年5月7日
    00
  • JavaScript中constructor()方法的使用简介

    JavaScript中constructor()方法的使用简介 1. constructor()方法的概述 在JavaScript中,每个对象都有一个constructor方法,该方法返回创建该对象的构造函数。constructor方法通常用于检测对象类型。 2. 使用constructor()方法检测对象类型 可以使用constructor方法来检测对象的…

    other 2023年6月26日
    00
  • 【X86】—X86处理器大小端的数据存储验证

    X86处理器是一种常见的CPU架构,它支持两种不同的数据存储方式:大端模式和小端模式。本文将介绍如何验证X86处理器的数据存储方式,包括大端模式和小端模式的概念、验证方法和示例说明。 1. 大端模式和小端模式 在计算机中,数据存储方式可以分为两种:大端模式和小端模式。大端模式是指高位字节存储在低地址,低位字节存储在高地址;小端模式是指低位字节存储在低地址,高…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部