原型模式&建造者模式

110 阅读3分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

4.原型模式

OA系统中,有一个提交周报的功能。每一个周五,员工都需要,员工都需要总结本周工作内容,以及写出下周工作计划。

问题是,每一周的周报 ,内容上基本都大同小异,出现特殊情况的几率很小。

克隆对象

标记接口Cloneable ,Seriable

思考1:clone方法,会不会引起构造器的调用?不会,clone方法是直接赋值内存中的2进制。效率更高

native 方法思考2:既然clone方法没有引起构造器的调用,那么克隆出的对象,和原先的对象,地址是否一致

线程阻塞的三个原因:

1.获取锁,得不到,就进入了等待锁的阻塞队列

2.wait,进入阻塞1队列

只有obj.notify()方法,才会唤醒这个队列中的线程

3.抵用sleep()或者IO,就进入了另一个阻塞队列

5.建造者模式

适用场景

建造者模式是在当创建复杂对象的算法应该独立于该对

象的组成部分以及它们的装配方式时适用的模式

定义:

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

我们在构建具体的Builder类的时候需要对Builder接口中的抽象方法进行实现,这样我们在构造过程中就不会遗忘某些东西,因为你没有重写的话,编译器不会让你通过。

建造者模式可以将一个产品的内部表象与产品的生成过程分割开

来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如

果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以

得到它们,而具体建造的过程和细节就不需知道了。

少实现一个报错

建造者必须与产品发生关系

指挥者的参数是建造者 类表接口虚线加三角

依赖 虚线加箭头

角色

在这样的设计模式中,有以下几个角色:

1 builder:为创建一个产品对象的各个部件指定抽象接口。

2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

3 Director:构造一个使用Builder接口的对象。

4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

建造者模式的优点

封装性好。在建造者模式的应用场景中,一般产品类和建造者类是比较稳定的。因此将主要的业务逻辑封装在导演类中可以取得较好的稳定性。

容易扩展。有新的需求可以引入新的建造者类

建造者模式和工厂模式的区别

建造者模式一般用来创造更为复杂的对象,工厂模式是将对象全部封装在工厂类中,由工厂直接向客户端提供产品,而建造者模式中,建造者类一般只提供各个组件的建造,而将具体的建造过程交给了Director类,由Director类负责将各个组件按照特定的规则组成产品,将组建好的产品交给客户端。建造者只负责产品的组装