「这是我参与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类负责将各个组件按照特定的规则组成产品,将组建好的产品交给客户端。建造者只负责产品的组装