【软件设计模式——单例模式和建造者模式】

单例模式

简述

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供全局访问点。这意味着在整个应用程序中,只能存在一个该类的对象实例。

主要特点

  • 一个类只有一个实例对象。
  • 提供一个全局访问点,使其他对象可以通过该访问点访问到唯一的实例。

优点

  • 避免了重复创建对象,节省了系统资源。
  • 提供了对唯一实例的集中控制。

Java代码示例

public class Singleton {
    // 私有静态成员变量,保存唯一实例
    private static Singleton instance;

    // 私有构造方法,防止外部实例化
    private Singleton() {}

    // 公有静态方法,获取唯一实例
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

上面是一个典型的懒汉式单例模式的实现,其中私有静态成员变量 instance 保存唯一实例,在公有静态方法 getInstance() 中进行实例化并返回。通过在 getInstance() 方法中进行判断,只有当 instance 为空时才进行实例化,避免了重复创建对象。

建造者模式

简述

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

主要角色

  • Product(产品):定义了构建过程中所创建的复杂对象。
  • Builder(抽象建造者):定义了构建复杂对象所需的各个步骤接口。
  • ConcreteBuilder(具体建造者):实现了抽象建造者接口,负责实现各个步骤的具体逻辑,并返回最终构建的产品。
  • Director(指挥者):负责调用建造者的各个步骤来构建复杂对象,控制构建过程的顺序和逻辑。

优点

  • 将复杂对象的构建过程封装在具体建造者类中,与产品类解耦。
  • 可以改变产品的内部表示和表示构建过程,对客户端隐藏具体实现细节。
  • 可以灵活组合和扩展建造过程,实现不同的产品构建。

Java代码示例

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 interface Builder {
    void buildPart1();
    void buildPart2();
    Product getResult();
}

public class ConcreteBuilder implements Builder {
    private Product product;

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

    @Override
    public void buildPart1() {
        product.setPart1("Part1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("Part2");
    }

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

public class Director {
    public Product construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
        return builder.getResult();
    }
}

public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director();

        Product product = director.construct(builder);
        // 获取构建完成的产品
    }
}

上述代码展示了建造者模式的一个简单实现。其中 Product 是待构建的复杂对象,Builder 是抽象建造者接口,ConcreteBuilder 是具体建造者类,Director 是指挥者类。客户端通过指挥者调用建造者的各个步骤来构建复杂对象。使用建造者模式可以实现不同的具体建造者类来构建不同的产品,且可以灵活组合和扩展建造过程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Muuuzi丶

您的鼓励是我创作的无限动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值