设计模式之-创建者模式

创建者模式(Creational Pattern)

提供了多种优雅创建对象的方法

工厂方法模式(Factory Pattern)

提供一种简单、快速、高效而安全地创建对象的方式

工厂模式在接口中定义了创建对象的方法,而将具体的创建对象的过程在子类中实现,用户只需要通过接口创建需要的对象即可,不用关注对象的具体创建过程。同时,不同的子类可根据需求灵活实现创建对象的不同方法

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式在工厂模式上添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂

在使用中,首先通过抽象接口创建不同的工厂对象,然后根据不同的工厂对象创建不同的对象

单例模式(Singleton Pattern)

保证系统唯一性的重要手段
  • 首先通过将类的实例化方法私有化来防止程序通过其他方式创建该类的实例,然后通过提供一个全局唯一获取该类实例的方法帮助用户获取类的实例,用户只需也只能通过调用该方法获取类的实例
  • 单例模式的设计保证了一个类在整个系统中同一时刻只有一个实例存在,主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下
  • 单例模式为系统资源的优化提供了很好的思路,频繁创建和销毁对象都会增加系统的资源消耗,而单例模式保障了整个系统只有一个对象能够被使用,很好的节约了资源
  • 注意,单例模式的类构造器函数是私有的,只能由自身创建和销毁对象,不允许除了该类的其他程序使用new关键字创建对象及破坏单例模式

常见写法

懒汉式(线程安全)

定义私有静态对象,然后定义一个加锁的静态方法获取该对象,如果该对象为null,则定义一个对象实例并将其赋值给静态对象,这样下次就可以直接获取
  • 定义静态对象的原因:静态属性或方法是属于类的,能够很好的保障单例对象的唯一性

饿汉式

指在类中直接定义全局的静态对象的实例并初始化,然后提供一个方法获取该实例
懒汉式和饿汉式的区别
  • 懒汉式在类中定义了单例但是并未实例化,实例化的过程是在获取单例对象的方法中实现的,即第一次获取调用懒汉式时,该对象一定为空,然后去实例化对象并赋值,这样下次就能直接获取对象了
  • 饿汉式是在定义单例对象的同时将其实例化的,直接使用即可。也就是说,在饿汉模式下。在ClassLoader完成后该类的实例便已经存在于JVM之中了

静态内部类

通过在类中定义一个静态内部类,将其对象的实例定义和初始化放在内部类中完成,在获取对象时要通过静态内部类调用其单例对象

设计原因:静态内部类在JVM中是唯一的,很好的保障了单例对象的唯一性

双重校验锁

在懒汉式的基础上做进一步优化,给静态对象的定义加上volatile锁来保障初始化时对象的唯一性

建造者模式(Builder Pattern)

使用多个简单对象创建一个复杂对象,用于将一个复杂的构建与其表示分离,是得同样的构建过程可以创建不同的表示,然后通过一个Builder类(该Builder类是独立于其他对象的)创建最终的对象

建造者模式主要用于解决软件系统中复杂对象的创建问题
建造者模式常被用于一些基本部件不会变而其组合经常变化的应用场景下

建造者模式与工厂模式最大的区别是,建造者模式更关注产品的组合方式和装配顺序,而工厂模式更关注产品的生产本身

建造者模式设计时的角色

Builder

创建一个复杂产品对象的抽象接口

ConcreteBuilder

Builder接口的实现类,用于定义复杂产品各个部件的装配流程

Director

构造一个使用Builder的接口

Product

表示被构造的复杂对象。ConcreteBuilder定义了该复杂对象的装配流程,而Product定义了该复杂对象的结构和内部表示

原型模式(Prototype Pattern)

指通过调用原型实例的Clone方法或其他手段来创建对象

它以当前对象为原型(蓝本)来创建另一个新对象,而无需知道创建的细节

原型模式在Java中通常使用Clone技术实现,在JavaScript中通常使用对象的原型属性来实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值