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日

相关文章

  • win7电脑死机的问题及解决方法

    Win7电脑死机的问题及解决方法 问题描述 Win7电脑死机是一个常见问题,通常表现为电脑屏幕冻结、鼠标键盘无法操作、声音卡住等症状。这种情况经常给用户带来很多困扰,往往需要通过一些方法来解决。 解决方法 方法1:检查硬件设备故障 Win7电脑死机的原因往往是由于硬件设备故障所导致。如果出现死机的情况,可以先检查硬件设备是否有问题。检查时可以从以下几个方面入…

    other 2023年6月27日
    00
  • RealProxy深入

    RealProxy深入的完整攻略 RealProxy是.NET Framework中的一个类,用于创建动态代理。动态代理是一种在运行时创建代理对象的技术,可以用于实现AOP(面向切面编程)等功能。在.NET Framework中,可以使用RealProxy类创建动态代理对象。 RealProxy的使用方法 使用RealProxy创建动态代理对象的步骤如下: …

    other 2023年5月5日
    00
  • 流放之路3.2野蛮人酋长超载火旋风BD介绍 开荒后期BD攻略

    流放之路3.2野蛮人酋长超载火旋风BD介绍 简介 在流放之路3.2版本中,野蛮人酋长超载火旋风(Barbarian Chieftain Cyclone with Berserk)是一种强大的建议角色扮演(ARPG)构建。该构建利用野蛮人的强大生存能力和高爆发伤害,以火旋风技能为主要输出手段。本攻略将详细介绍该构建的技能配置、装备选择和技能使用策略。 技能配置…

    other 2023年8月5日
    00
  • MySQL数据库grant授权命令

    下面是 MySQL 数据库 grant 授权命令的完整攻略,包括授权命令的语法、使用方法和两个示例说明。 授权命令的语法 MySQL 数据库 grant 授权命令的语法如下: GRANT privileges ON database.table TO ‘user’@’host’ IDENTIFIED BY ‘password’; 其中,privileges …

    other 2023年5月5日
    00
  • C++-操作符重载、并实现复数类详解

    C++-操作符重载、并实现复数类详解 什么是操作符重载 操作符重载是指允许用户自定义操作符所代表的行为,以及对于自定义类型的操作符操作。在C++中,操作符是一种独立于函数之外的特殊函数。 为什么需要操作符重载 操作符重载可以让程序更加简洁、易读。举例来说,C++中可以使用”+”操作符来进行两个整数的加法运算。但如果我们想要把两个自定义类型的对象相加,就需要进…

    other 2023年6月26日
    00
  • Redis教程(十四):内存优化介绍

    Redis教程(十四):内存优化介绍 1. 介绍 在Redis中,内存是一个非常重要的资源。合理地使用和优化内存可以提高Redis的性能和稳定性。本教程将详细介绍Redis的内存优化技巧和策略。 2. 内存优化技巧 2.1 使用压缩列表 Redis中的列表和哈希表都可以使用压缩列表来节省内存。压缩列表是一种紧凑的数据结构,可以在一定程度上减少内存占用。下面是…

    other 2023年8月2日
    00
  • numpy库的下载及安装(吐血总结)

    NumPy库的下载及安装(吐血总结) NumPy是Python中常用的科学计算库,提供了高效的多维数组对象和各种派生对象,以及用于数组计算的函数。本文将介绍NumPy库的下载及安装的完整略,包括两个示例说明。 步骤一:安装pip 在使用pip安装NumPy之前,需要先安装pip。可以使用以下命令在终端中安装pip: sudo easy_install pip…

    other 2023年5月9日
    00
  • js的es6的基础语法

    JS的ES6的基础语法 ES6是ECMAScript 6的简称,是JavaScript语言的下一代标准。ES6又称ES2015,于2015年6月正式发布。ES6引入了许多新的语法特性和API,旨在让JavaScript语言更易用、更强大和更适合复杂的应用程序开发。在本文中,我们将介绍ES6的一些基础语法。 let和const ES6引入了两个新的声明变量的关…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部