构造型模式涉及对象的实例化,这类模式的特点是,不让用户代码依赖于对象的创建或排列方式,避免用户直接使用new运算符创建对象。
构造型模式主要包括:
- 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method使一个类的实例化延迟到其子类。
- 抽象工厂模式:提供一个创建一系列或互相依赖对象的接口,而无需指定它们具体的类。
- 生成器模式:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
- 原型模式:用原型实例指定创建对象的种类,并且通过复制这些原创创建新的对象
- 单件模式(单例模式):保证一个类仅有一个实例,并提供一个全局访问点。
构造器
定义
构造对象并初始化。创建对象时调用的函数,创建对象时都必须对构造函数初始化。
- 一个类中可有多个构造器。
- 构造器的名字和类名相同。
- 构造器可有0个、1个、多个参数。
- 构造器不是函数。
构造器和一般函数的区别
构造器 | 函数 |
---|---|
为了创建类的实例 | 执行java代码 |
对象创建时调用进行对象的初始化 | 需要函数功能时才调用 |
只会调用一次 | 可以调用多次 |
名称大写,和类名相同 | 名称小写 |
不用定义返回值类型,无返回值 | 需要定义返回类型 |
不能从父类中继承 | 可以继承 |
修饰符只有public.protected.private三个 | 抽象、同步、静态都可以 |
使用构造器必须new,Person person = new Person() | 通过函数名调用 |
Java在构造类实例时的顺序(1和2是类的装载过程)
- 静态变量赋值,不赋值就不执行。
- 静态代码块,只执行一次。
- 分配对象空间,将对象中的成员初始化(0、false、null)java不允许用户操作一个不确定的值。
- 属性值的显示初始化(成员变量直接赋值)。
- 执行构造器。
- 对象方法(变量关联到堆中的对象上)
一个类中如果没有定义构造函数,那么类中就会有一个默认的空参构造函数;如果定义了指定的构造函数,那类中的构造函数就不执行了。
什么时候定义构造函数
在描述事物的时候,该事物已经具备一定的功能,这些内容都定义在构造函数中。
Person() {
name = “baby”;
age=1;
}
Person(String n) {
name = n;
}
Person(String n, int a) {
name = n;
age = a;
}
- 一个类中出现了多个构造函数,他们必须以重载形式体现,可以对不同的对象进行不同的初始化。
- this可以在构造函数中调用本类的其他构造函数,super调用父类的构造函数,默认父类的默认构造函数,也可以指定。this、super的调用都必须放在构造函数的第一行,因为要首先执行初始化动作,否则编译失败。
- 当父类的默认构造函数被覆盖掉时,super()调用会报编译器错误。
注意事项
- 构造器中不要创建自身实例,会造成栈溢出错误。
- 如果父类是一个抽象类,通过调用父类的构造器,也可以将它初始化,并且初始化其中的数据。
- 在构造器中调用一个方法时,把它声明为private的。如果这个方法被子类重写,可能会出现在父类构造器对方法的调用因为多态而调用子类的方法,这时子类会因为变量没有初始化而出现异常。原则是始终保证父类调用自己的方法。