当前位置: 首页 > 开发者资讯

java怎么开创造模式 java创建型模式有哪些

  在Java编程中,创建型模式是一种重要的设计模式,它关注对象的创建过程,通过抽象化和解耦对象的实例化过程,使得系统更加灵活、可扩展和易于维护。本文将详细介绍Java中的创建型模式及其具体实现方式。

  一、什么是创建型模式?

  创建型模式是设计模式三大分类之一,主要解决对象创建的复杂性问题。它通过将对象的创建逻辑封装在特定的类或方法中,避免直接使用new关键字来创建对象,从而实现代码的解耦和灵活性。这种模式特别适用于以下场景:

  系统需要控制对象的创建过程:例如,确保一个类只有一个实例,或者需要动态决定对象的类型。

  对象的创建逻辑复杂:例如,需要通过多个步骤逐步构建对象。

  需要隐藏对象的创建细节:例如,封装工厂类或抽象工厂类来管理对象的生成。

Java6.png

  二、Java中的创建型模式有哪些?

  根据不同的需求和使用场景,Java中的创建型模式可以分为以下五种:

  1. 单例模式(Singleton Pattern)

  单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式适用于需要频繁访问且资源消耗较大的对象,如线程池、配置管理器等。

  特点:

  线程安全:通过双重检查锁定(Double-Checked Locking)实现线程安全。

  隐藏构造函数:不允许外部直接实例化。

  提高效率:避免重复创建对象。

  实现方式:

  public class Singleton {

  private static volatile Singleton instance;

  private Singleton() {}

  public static Singleton getInstance() {

  if (instance == null) {

  synchronized (Singleton.class) {

  if (instance == null) {

  instance = new Singleton();

  }

  }

  }

  return instance;

  }

  }

  运行

  优点:

  确保全局唯一性。

  提高性能。

  缺点:

  单例对象无法被垃圾回收。

  不适合多线程环境下的动态创建。

  2. 工厂方法模式(Factory Method Pattern)

  工厂方法模式定义一个用于创建对象的接口,但由子类决定实例化哪一个类。这种模式将对象的实例化延迟到子类中完成。

  特点:

  接口统一:定义一个公共接口,由子类实现具体的创建逻辑。

  扩展性强:可以通过扩展子类轻松添加新的产品类型。

  实现方式:

  // 抽象工厂类

  public abstract class AbstractFactory {

  public abstract Product createProduct();

  }

  // 具体工厂类

  public class ConcreteFactory1 extends AbstractFactory {

  @Override

  public Product createProduct() {

  return new ProductA();

  }

  }

  // 产品接口

  public interface Product {

  void use();

  }

  // 具体产品类

  public class ProductA implements Product {

  @Override

  public void use() {

  System.out.println("Using Product A");

  }

  }

  // 客户端代码

  public class Client {

  public static void main(String[] args) {

  AbstractFactory factory = new ConcreteFactory1();

  Product product = factory.createProduct();

  product.use();

  }

  }

  运行

  优点:

  解耦:客户端无需关心具体产品的创建逻辑。

  扩展性好。

  缺点:

  创建多个相关产品时,工厂类数量较多。

  [[Java工厂方法模式示意图]]

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

  抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。

  特点:

  提供统一的接口:定义一组工厂方法,用于创建一系列相关产品。

  解耦:客户端无需了解具体产品的实现细节。

  实现方式:

  // 抽象工厂接口

  public interface AbstractFactory {

  ProductA createProductA();

  ProductB createProductB();

  }

  // 具体工厂类

  public class ConcreteFactory1 implements AbstractFactory {

  @Override

  public ProductA createProductA() {

  return new ProductA1();

  }

  @Override

  public ProductB createProductB() {

  return new ProductB1();

  }

  }

  // 产品接口

  public interface ProductA {

  void use();

  }

  // 具体产品类

  public class ProductA1 implements ProductA {

  @Override

  public void use() {

  System.out.println("Using Product A1");

  }

  }

  // 客户端代码

  public class Client {

  public static void main(String[] args) {

  AbstractFactory factory = new ConcreteFactory1();

  ProductA productA = factory.createProductA();

  productA.use();

  }

  }

  运行

  优点:

  提供统一的接口,方便扩展。

  解耦性强。

  缺点:

  如果产品种类过多,抽象工厂类会变得复杂。

  [[Java抽象工厂模式示意图]]

  4. 建造者模式(Builder Pattern)

  建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  特点:

  分离构建和表示:允许逐步构建复杂对象。

  提高可读性和可维护性。

  实现方式:

  public class Builder {

  private String part1;

  private String part2;

  public Builder() {}

  public Builder setPart1(String part1) {

  this.part1 = part1;

  return this;

  }

  public Builder setPart2(String part2) {

  this.part2 = part2;

  return this;

  }

  public Product build() {

  return new Product(part1, part2);

  }

  }

  public class Product {

  private String part1;

  private String part2;

  public Product(String part1, String part2) {

  this.part1 = part1;

  this.part2 = part2;

  }

  @Override

  public String toString() {

  return "Product{" +

  "part1='" + part1 + '\'' +

  ", part2='" + part2 + '\'' +

  '}';

  }

  }

  public class Client {

  public static void main(String[] args) {

  Builder builder = new Builder();

  Product product = builder.setPart1("Part1")

  .setPart2("Part2")

  .build();

  System.out.println(product);

  }

  }

  运行

  优点:

  提高代码可读性。

  灵活性强。

  缺点:

  实现较为复杂。

  [[Java建造者模式示意图]]

  5. 原型模式(Prototype Pattern)

  原型模式通过复制现有的对象来创建新的对象,而不是重新实例化。

  特点:

  复用现有对象:避免重复创建相同类型的对象。

  提高性能。

  实现方式:

  public class Prototype implements Cloneable {

  private String state;

  public Prototype(String state) {

  this.state = state;

  }

  public Prototype clone() throws CloneNotSupportedException {

  return (Prototype) super.clone();

  }

  public String getState() {

  return state;

  }

  public void setState(String state) {

  this.state = state;

  }

  }

  public class Client {

  public static void main(String[] args) throws CloneNotSupportedException {

  Prototype prototype = new Prototype("Initial State");

  Prototype copyPrototype = (Prototype) prototype.clone();

  System.out.println("Original: " + prototype.getState());

  System.out.println("Copy: " + copyPrototype.getState());

  }

  }

  运行

  优点:

  性能高。

  简单易用。

  缺点:

  不适用于复杂对象的复制。

  [[Java原型模式示意图]]

  Java中的创建型模式主要包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。这些模式通过不同的方式解决了对象创建过程中的问题,提高了代码的灵活性和可维护性。开发者可以根据具体需求选择合适的模式来优化系统设计。

猜你喜欢