20220315

 建造者(Builder)模式


@Builder
public class HardwareFeeEntity {
}

HardwareFeeEntity entity1 = HardwareFeeEntity.builder().accountPeriod("202202").applyStatus("Y").build();


 静态工厂方法

Map<String, List<String>> m = HashMap.newInstance();

public Static <k,v> HashMap<K,V> new Instance(){

return new HashMap<k,v>();

}

静态工厂方法与用new语句调用的构造方法相比,有以下区别: 

1:构造方法的名字必须与类名相同。这一特性的优点是符合Java语言的规范,缺点是类的所有重载的构造方法的名字都相同,不能从名字上区分每个 重载方法,容易引起混淆。静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性,在方法名中能体现与实例有关的信息。

2:每次执行new语句时,都会创建一个新的对象。而静态工厂方法每次被调用的时候,是否会创建一个新的对象完全取决于方法的实现。

3:new语句只能创建当前类的实例,而静态工厂方法可以返回当前类的子类的实例,这一特性可以在创建松耦合的系统接口时发挥作用。 

 

 

 

***静态工厂方法最主要的特点是:每次被调用的时候,不一定要创建一个新的对象。利用这一特点,静态工厂方法可用来创建以下类的实例。 

<1> 单例类:只有惟一的实例的类。 

<2>枚举类:实例的数量有限的类。 

<3>具有实例缓存的类:能把已经创建的实例暂且存放在缓存中的类。 

<4>具有实例缓存的不可变类:不可变类的实例一旦创建,其属性值就不会被改变。

 

提供静态工厂方法而不是公有的构造器,这样做有几大优势

1) 它们有名称.

 

2) 不必在每次调用它们的时候都创建一个新对象.

3) 它们可以返回原返回类型的任何子类型的对象.

 

 

equals方法是java.lang.Object类的方法

一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

 1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。

(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)

 2、“equals()”比较字符串中所包含的内容是否相同。

 

 

object.equals()

本身是对于对象地址值的比较(对象引用比较),String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。

本身定义:

public boolean equals(Object obj) {  
    return (this == obj);  
} 

String重构方法:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n– != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}

 

Math、Integer、Double等这些类都是重写了equals()方法的,从而进行的是内容的比较

基本类型是进行值的比较。

 

相等的对象,它们的hash code一定相等。

 两个对象的hashCode相同,它们并不一定相同

 

 

 

 

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
propagation 事务属性
isolation 隔离等级
rollbackFor 回滚异常



其实Cloneable接口仅仅是一个标志,而且这个标志也仅仅是针对 Object类中 clone()方法的,如果 clone 类没有实现 Cloneable 接口,并调用了 Object 的 clone() 方法(也就是调用了 super.Clone() 方法),那么Object 的 clone() 方法就会抛出 CloneNotSupportedException 异常。

object.clone()

public class Person {
private String name;
private int age;
public Person(){}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Object clone(){
Object o=null;
try {
o=super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

这是浅拷贝 

浅拷贝 拷贝对象复制会影响父对象 其他对象的引用仍然指向原对象

深拷贝 拷贝对象赋值不会影响父对象 ,深层复制要复制的对象引用的对象都复制一遍。

 

数据库与缓存数据一致性解决方案

 

posted @ 2022-03-15 17:48  dabendan123  阅读(36)  评论(0)    收藏  举报