1. 在 java 程序中 , 对象可以被显式地或者隐式地创建?
1.1显 式的创建对象的方式
A. 用 new 语句创建对象
B. 运用反射手段 , 调用 java.lang.Class 或者 java.lang.reflect.Constructor 类的 newInstance() 实
例方法
C. 调用对象的 clone() 方法
D. 运用序列化手段 , 调用 java.io.ObjectInputStream 对象的 readObject() 方法 .
1.2隐式 建对象的方式
A. String a= "hello"; 这种属于 String 类型直接对应一个 String 对象,引用一个 String 对象。若此时运行 String b="hello"; 则 a 和 b 是同一个对象。
B. String 中 + 的使用。
C. JVM 加载一个类的时候,会隐含创建描述这个类的 Class 实例。
2 .显示创建中各种方式的用途及优缺点?
2.1 用 new 语句创建对象:
如果构造方法中有参数,当使用这种方式写程序时不利于扩展参数,扩展时会导致多出修改
2.2 运用反射手段
此方法可以帮助减少 if-else 语句
2.3 clone 方法
对应了创建型模式的 prototype 模式,用于克隆一个具有同样属性的对象出来
注意深度 clone 的实现
2.4 运用序列化手段
还没使用过
3. 根据对象的复杂性使用不同的设计模式渐进的实现对象的构造?
3.1Singleton 模式
保证一个类仅有一个实例,应提供一个访问它的全局访问点
有些对象是需要计划生育的,如太阳。
Singleton 的实现方式有饿汉式和懒汉式两种
饿汉式代码:
public class Sun{
private static final Sun uniqueInstance = new Sun();
private Sun(){}
public static Sun getInstance(){
return uniqueInstance ;
}
}
懒汉式代码:
public class Sun {
private static Sun uniqueInstance ;
private Sun(){}
public static Sun getInstance(){
if ( uniqueInstance == null ){
synchronized (Sun. class ){
if ( uniqueInstance == null ){
uniqueInstance = new Sun();
}
}
}
return uniqueInstance ;
}
}
3.2 prototype 原型模式 (clone)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
有时创建的对象要求和已有对象完全一样,如个人简历
此模式分为浅复制和深复制
浅复制:复制出的对象的所有原型变量都与原来的对象具有相同的值,而所有的其他对象引用的变量都仍然指向原来的对象。
public class Resume implements Cloneable {
private String name ;
private int age ;
@Override
public Resume clone() throws CloneNotSupportedException {
Resume message = (Resume) super .clone();
return message;
}
}
深复制:将对象中的引用型变量也复制出来
public class Resume implements Cloneable {
private User user ;
@Override
public Resume clone() throws CloneNotSupportedException {
Resume message = (Resume) super .clone();
if ( this . user != null ) {
message. user = this . user .clone();
}
return message;
}
}
3.3 Factory 工厂模式
此模式又分为三个子模式:简单工厂模式、工厂方法模式、抽象工厂模式。他们因要创造的对象的复杂程度不同而渐进变化。
简单工厂模式:这好比个人的作坊,生产的产品比较简单
生产苹果的例子
public class AppleFactory {
public static Apple getApple() {
Apple apple = new Apple();
return apple;
}
private AppleFactory() {
}
}
工厂方法:此时生产的为统一接口且不同实现的产品。工厂有个接口,生产的产品也有个接口,每种具体的产品对应一个具体工厂
抽象工厂:此时生产的产品为相互依赖的、有一定关联的多种产品。工厂有个接口,每个工厂都对应生产出这些相互依赖的产品。
3.4 Builder 建造者模式
此模式创造的是一个复杂的对象,达到对象的构建与它的表示相分离,使得同样的
构建过程可以创建出不同的表示。
看图说话:
模式中有个指挥员,指挥具体的建造者建超产品,最有建造者通过 getResult() 获取产品