Memento 设计模式是行为模式,是 Gang of Four 讨论的 23 种[设计模式](https://howtodoinjava.com/gang-of-four-java-design-patterns/)之一。 **纪念图案**用于将对象的状态恢复到先前的状态。 也称为**快照模式**。
Memento 设计模式是行为型模式,是 Gang of Four 讨论的 23 种[设计模式](https://howtodoinjava.com/gang-of-four-java-design-patterns/)之一。 **纪念图案**用于将对象的状态恢复到先前的状态。 也称为**快照模式**。
属性`unpackWARs="true"`表示,如果将 WAR 文件拖放到`appBase`目录中,Tomcat 将自动将其扩展到普通文件夹中。 如果将此属性设置为`false`,则应用将直接从 WAR 文件运行。 这显然意味着应用的执行速度较慢,因为 Tomcat 需要在执行时解压缩 WAR 文件。
Please be sure to use “[**volatile**](https://en.wikipedia.org/wiki/Volatile_variable#In_Java"volatile in java")” keyword with instance variable otherwise you can run into an out of order write error scenario, where reference of an instance is returned before actually the object is constructed i.e. JVM has only allocated the memory and constructor code is still not executed. In this case, your other thread, which refers to the uninitialized object may throw null pointer exception and can even crash the whole application.
@@ -153,11 +153,11 @@ public class BillPughSingleton {
```
As you can see, until we need an instance, the LazyHolder class will not be initialized until required and you can still use other static members of BillPughSingleton class. ***This is the solution, i will recommend to use. I have used it in my all projects.***
The builder pattern is a design pattern that allows for the step-by-step creation of complex objects using the correct sequence of actions. The construction is controlled by a director object that only needs to know the type of object it is to create.
我们已经知道[**不可变**](//howtodoinjava.com/java/related-concepts/how-to-make-a-java-class-immutable/"How to make a java class immutable")和不可变实例在应用中的好处。 如果对此有任何疑问,请让我想起 Java 中的`String`类。 正如我已经说过的那样,构建器模式可以帮助我们创建具有大量状态属性的不可变类。
我们已经知道[**不可变**](//howtodoinjava.com/java/related-concepts/how-to-make-a-java-class-immutable/"How to make a java class immutable")和不可变实例在应用中的好处。 如果对此有任何疑问,请让我想起 Java 中的`String`类。 正如我已经说过的那样,构建器模式可以帮助我们创建具有大量状态属性的不可变类。
让我们讨论一下我们应用中的一个常见问题。 假设在任何用户管理模块中,主要实体都是`User`。 理想情况下,实际上,一旦完全创建了用户对象,您就不想更改其状态。 根本没有道理,对吧? 现在,假设我们的 User 对象具有以下 5 个属性,即`firstName`,`lastName`,`age`,`phone`和`address`。
*[java.sql.DriverManager#getConnection()](https://docs.oracle.com/javase/10/docs/api/java/sql/DriverManager.html#getConnection%28java.lang.String%29"driver manager get connection")
*[java.net.URL#openConnection()](https://docs.oracle.com/javase/10/docs/api/java/net/URL.html#openConnection%28%29"url open connection")
*[java.lang.Class#newInstance()](https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html#newInstance%28%29"class new instance")
*[`java.sql.DriverManager#getConnection()`](https://docs.oracle.com/javase/10/docs/api/java/sql/DriverManager.html#getConnection%28java.lang.String%29"driver manager get connection")
*[`java.net.URL#openConnection()`](https://docs.oracle.com/javase/10/docs/api/java/net/URL.html#openConnection%28%29"url open connection")
*[`java.lang.Class#newInstance()`](https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html#newInstance%28%29"class new instance")