黑马程序员技术交流社区

标题: 组合 [打印本页]

作者: NeXtyin    时间: 2016-5-8 22:48
标题: 组合

如果大家还记得设计模式里的建造者模式,那么很容易联想到组合机制,就是将一系列的对象组合在一起,组合成一个功能丰富的类,当然,这些对象包括基本数据类型,也包括引用。来看个例子:
[java] view plain copy
class Soap{  
    private String s;  
    Soap(){  
        System.out.println("soap");  
        s = "constructor";  
    }  
    public String toString(){  
        return s;  
    }  
}  
  
public class CompronentTest {  
    private String s1 = "happy",s2="Happy",s3,s4;  
    private Soap castille;  
    private int i;  
    public CompronentTest(){  
        s3 = "joy";  
        castille = new Soap();  
    }  
    {  
        i = 88;  
    }  
    public String toString(){  
        if(s4 == null){  
            s4 = "Joy";  
        }  
            return "s1 = " + s1 + "\n" +  
                   "s2 = " + s2 + "\n" +  
                   "s3 = " + s3 + "\n" +  
                   "s4 = " + s4 + "\n" +  
                   "i = " + i + "\n" +  
                   "castille = " + castille;  
  
    }  
    public static void main(String[] args) {  
        CompronentTest ct = new CompronentTest();  
        System.out.println(ct);  
    }  
}  
该类就是一个普通的组合类,在组合类中我们应该注意这个对象的初始化方式,此处:1、s1和s2采用在声明的地方直接赋值,这样能够保证它们在构造器被调用之前被初始化(详细可见类与对象一中关于类的初始化顺序的介绍)。2、s3在构造器中初始化。3、s4采用的是懒加载(下面会讲)。4、i在非静态初始化块中。此处我们说下toString方法,就是一个将其它对象转为String对象的方法,除了非基本类型的对象,其它都有一个toString方法,这是因为toString方法是Object类的固有方法,在Java中任何类都隐式继承Object类,也就说都隐含toString方法。所以,在上述的例子中,当最后的字符串+ castille对象时,需要将castille对象以字符串的形式表现出来,因此调用了toString()。
懒加载因为涉及持有对象实例,所以会涉及到懒加载的机制,代码中的:
if(s4 == null){
         s4 = "Joy";
}
就是一种懒加载的机制,这种机制就是解决当所需的对象比较庞大的时候,只有在用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2