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

yizhihongxing

以下是使用标准的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日

相关文章

  • Win10 TH2更新贴心改进:右键单击菜单新增Defender扫描

    Win10 TH2更新贴心改进:右键单击菜单新增Defender扫描 在Win10 TH2更新中,Microsoft对Windows Defender进行了一些改进,其中一个值得注意的改进是,你现在可以在文件系统中右键单击一个文件或文件夹,选择“扫描”并在Windows Defender中进行扫描。以下是完整攻略: 1. 确认已安装最新版本的Windows …

    other 2023年6月27日
    00
  • 使用postman进行接口测试的方法(测试用户管理模块)

    以下是使用Postman进行接口测试的完整攻略,以测试用户管理模块为例。 1. 下载并安装Postman 首先,我们需要下载并安装Postman,下载地址为 https://www.postman.com/downloads/ 2. 添加测试环境 在Postman中添加一个新的测试环境,点击左上角“环境Quick Look”下方的“Edit”,输入环境名称,…

    other 2023年6月27日
    00
  • uniapp实现注册发送获取验证码功能

    在uniapp中实现注册发送获取验证码功能的步骤如下: 1. 安装相关依赖 安装uniapp官方提供的request-promise库用于发送http请求,可以通过以下命令行安装: npm install request-promise –save 2. 实现发送短信验证码的接口 我们需要调用接口来发送短信验证码,这一步需要和后端开发人员协作,确定生成验证…

    other 2023年6月27日
    00
  • App Store不能下载一直等待中的两种解决办法

    App Store不能下载一直等待中的两种解决办法 有时候,当您尝试从App Store下载应用程序时,可能会遇到一直等待的问题。这可能是由于各种原因引起的,但是您可以尝试以下两种解决办法来解决这个问题。 解决办法一:重新启动设备 有时候,重新启动设备可以解决App Store下载一直等待的问题。请按照以下步骤进行操作: 按住设备的电源按钮,直到出现滑动关机…

    other 2023年8月4日
    00
  • cacls命令设置文件及其文件夹权限的方法

    下面是关于 cacls 命令设置文件及其文件夹权限的完整攻略。 什么是cacls命令 cacls 命令是用于在 Windows 操作系统中修改或显示文件或文件夹权限的命令行工具。它允许用户修改权限,使得特定用户或用户组能够在文件或文件夹上执行指定的操作。 cacls命令的语法 cacls <文件或文件夹路径> [/E] [/T] [/C] [/G…

    other 2023年6月27日
    00
  • 阿里云DataV专业版发布,为可视化创造更多可能!

    阿里云DataV专业版是一款数据可视化工具,可以帮助用户将数据转化为可视化的图表和报表,从而更好地理解和分析数据。本文将介绍阿里云DataV专业版的完整攻略,包括使用方法、功能特点和示例说明。 使用方法 使用阿里云DataV专业版需要进行以下步骤: 注册阿里云账号并购买DataV专业版 登录DataV控制台并创建项目 添加数据源并配置数据连接 创建可视化组件…

    other 2023年5月5日
    00
  • 微信小程序全局配置及常用配置项详解

    微信小程序全局配置及常用配置项详解 什么是微信小程序配置文件 每个微信小程序都需要一个配置文件app.json。这个文件用来对小程序进行一些全局性的配置,例如设置页面路径、窗口背景色、顶部条颜色等等,而且这些配置无论在哪个页面都能生效。 app.json配置文件结构 一个app.json文件包括了整个小程序的全局配置,是一个全局性的配置文件,不需要放在pag…

    other 2023年6月25日
    00
  • 一文搞懂JAVA 修饰符

    一文搞懂JAVA 修饰符 在Java中,修饰符(Modifier)是用来限制或者开放类、接口、方法和变量的访问权限;限制或者限制方法的继承或其他行为。Java中的修饰符分为以下几种: 访问控制修饰符:public,private,protected和默认(即不写)四种修饰符。 继承控制修饰符:final 和 abstract 两种修饰符。 静态修饰符:sta…

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