一 单例模式
饿汉:
public class SingleTon {
private static final SingleTon INSTANCE = new SingleTon();
private SingleTon() {
}
public static SingleTon getInstance() {
return INSTANCE;
}
}
懒汉:
public class SingleTon {
private volatile static SingleTon INSTANCE = null;
private SingleTon() {
}
public static SingleTon getInstance() {
if (INSTANCE == null) {
synchronized (INSTANCE) {
if (INSTANCE == null)
INSTANCE = new SingleTon();
}
}
return INSTANCE;
}
}
对比:因为对象在构造的时候可能会有时间开销,因此在多线程的时候需要考虑到线程安全,voliate关键字只能保证对象的可见性, synchronized保证线程安全
二: 工厂模式
类图:
普通工厂代码:
1.接口实现功能
public interface Sender {
public void send();
}
2. 不同的类实现不同功能:
QQ: public class QQ implements Sender {
@Override
public void send() {
System.out.println("QQ send info");
}
}
WeChat: public class WeChat implements Sender {
@Override
public void send() {
System.out.println("WeChat send info");
}
}
3.工厂创建对象
public class SendFactory {
public static final String QQ = "QQ";
public static final String WeChat = "WECHAT";
public Sender product(String type) {
if (SendFactory.QQ.equals(type)) {
return new QQ();
} else if (SendFactory.WeChat.equals(type)) {
return new WeChat();
}
return null;
}
}
普通工厂和工厂方法差不多,只是在普通工厂中创建对象需要一个参数(type),工厂方法中提供多个方法,不同方法创建不同工厂
三 适配器模式
类适配器:
类图:
代码:
接口抽象共同功能:
public interface Targetable {
public void method1();
public void method2();
}
产品一实现了功能:
public class Source {
public void method1(){
System.out.println("method1....");
}
新的产品需要功能2,创建适配器保证功能一二正常运行
public class SpecialAdapter extends Source implements Targetable {
@Override
public void method2() {
System.out.println("method2 ...");
}
}
对象适配器:
public class SpecialAdapter implements Targetable {
private Source source;
public SpecialAdapter(Source source) {
this.source = source;
}
@Override
public void method2() {
System.out.println();
}
@Override
public void method1() {
source.method1();
}
}
适配器关键字:组合 继承 实现