http://blog.youkuaiyun.com/zhangerqing/article/details/8194653
创建对象:
1,单例(Singleton)
作用:系统中只有一个该类的实例。
public class LazySingleton {
private static LazySingleton singleton = null;// 不再做实例化操作
private LazySingleton(){};// 构造方法声明为私有,这样就保证了只能有一个对象存在
// 提供一个外部得到类的方法
public synchronized static LazySingleton getInstance() {
if (null == singleton) {
synchronized (LazySingleton.class) {
if (null == singleton) {
singleton = new LazySingleton();
}
}
}
return singleton;
}
}
2,工厂
作用:将实例化交给一个工厂类来管理。如果你现在想增加一个功能:发及时信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好
public interface Sender {
public void Send();
}
public class MailSender implements Sender {
@Override
public void Send() {
System.out.println("this is mailsender!");
}
}
public class SmsSender implements Sender {
@Override
public void Send() {
System.out.println("this is sms sender!");
}
}
public interface Provider {
public Sender produce();
}
public class SendMailFactory implements Provider {
@Override
public Sender produce(){
return new MailSender();
}
}
public class SendSmsFactory implements Provider{
@Override
public Sender produce() {
return new SmsSender();
}
}
public class Test {
public static void main(String[] args) {
Provider provider = new SendMailFactory();
Sender sender = provider.produce();
sender.Send();
}
}
3,构造者
作用:将实例化交给一个建造者来管理。
public class User{
private String name;
private int age;
private boolean sex;
public static class Builder {
private String name;
private int age;
private boolean sex;
public Builder name(String val) {
name = val;
return this;
}
public Builder age(int val) {
age = val;
return this;
}
public Builder sex(boolean val) {
sex = val;
return this;
}
public User build() {
return new User(this);
}
}
private User(Builder builder) {
name = builder.name;
age = builder.age;
sex = builder.sex;
}
}
User user = new User.Builder.name("hello").age(18).sex(true).build();
4,原型(Prototype)
作用,将实例化通过clone()方法,即内存拷贝的方式,以此减少创建相似对象的消耗。
public class User {
private String name;
/* 浅复制 */
public Object clone() throws CloneNotSupportedException {
User user = (User) super.clone();
return user;
}
/* 深复制 */
public Object deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}<span style="font-family: Arial, Helvetica, sans-serif;">}</span>
程序结构:
1,适配器
作用: