尽量不使用继承,使用聚合。
聚合:雁群与雁
组合:雁与翅膀
除了builder模式,还有一个有用的技巧:拷贝工厂
。
cloneable
接口和clone
方法依赖于整个对象继承树的健壮性,由于设计理念是链式调用父类的clone
方法,维护难度过高,出错概率太大。
可行的方案之一是使用拷贝构造函数。
更推荐的方案是使用拷贝工厂
,例如下文的:
public static ClassA newInstance(ClassA obj);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package test1; import static java.lang.System.out; public class ClassA { public static void main(String[] args) { ClassA a1=new ClassA("a1",1); ClassA a2=ClassA.newInstance(a1); a1.AInt=2; a1.AString="changed"; a1.array[0]=100; out.println(a1.AString); out.println(a2.AString); out.println(a1.AInt); out.println(a2.AInt); out.println(a1.array[0]); out.println(a2.array[0]); } String AString; int AInt; int array[]; public ClassA(String aString,int aInt) { this.AString=aString; this.AInt=aInt; array=new int[1]; array[0]=1; } private ClassA() {} public static ClassA newInstance(ClassA obj) { ClassA classA = new ClassA(); classA.AInt = obj.AInt; classA.AString = obj.AString; classA.array = obj.array.clone(); return classA; } }
|