public class DependecyInversion {
public static void main(String[] args) {
Person person = new Person();
person.getInfo(new WeChat());
}
}
interface Receiver {
String receive();
}
class Person {
public void getInfo(Receiver receiver) {//接口传递
System.out.println(receiver.receive());
}
}
class WeChat implements Receiver {
public String receive() {
return "微信。。。。";
}
}
public class DependecyInversion {
public static void main(String[] args) {
Person person = new Person(new WeChat());
person.getInfo();
}
}
interface Receiver {
String receive();
}
class Person {
private Receiver receiver;
public Person(Receiver receiver) {//构造器传递
this.receiver = receiver;
}
public void getInfo() {
System.out.println(receiver.receive());
}
}
class WeChat implements Receiver {
public String receive() {
return "微信。。。。";
}
}
public class DependecyInversion {
public static void main(String[] args) {
Person person = new Person();
person.setReceiver(new WeChat());
person.getInfo();
}
}
interface Receiver {
String receive();
}
class Person {
private Receiver receiver;
public Receiver getReceiver() {
return receiver;
}
public void setReceiver(Receiver receiver) {//setter传递
this.receiver = receiver;
}
public void getInfo() {
System.out.println(receiver.receive());
}
}
class WeChat implements Receiver {
public String receive() {
return "微信。。。。";
}
}
public class EagerSingleton {//饿汉式
//私有构造器
private EagerSingleton() {}
private final static EagerSingleton INSTANCE = new EagerSingleton();
public static EagerSingleton getInstance() {
return INSTANCE;
}
public static void main(String[] args) {
EagerSingleton instance = EagerSingleton.getInstance();
EagerSingleton instance2 = EagerSingleton.getInstance();
System.out.println(instance == instance2);//true
}
}
public class DoubleCheckLazySingleton {//双重检查懒汉式
//volatile防止指令重排
private static volatile DoubleCheckLazySingleton singleton;
private DoubleCheckLazySingleton() {}
public static DoubleCheckLazySingleton getInstance() {
if (singleton == null) {
synchronized (DoubleCheckLazySingleton.class) {
if (singleton == null) {
singleton = new DoubleCheckLazySingleton();
}
}
}
return singleton;
}
}
public class StaticInnerClassSingleton {//静态内部类实现单例模式
private StaticInnerClassSingleton() {}
private static class SingletonInstance {
private static final StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
}
public static StaticInnerClassSingleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
enum Singleton {//枚举实现单例
//不仅可以避免多线程同步问题,而且可以防止反序列化重新创建新的对象
INSTANCE;
}
public class Test33 {
public static void main(String[] args) {
Singleton s = Singleton.INSTANCE;
Singleton s2 = Singleton.INSTANCE;
System.out.println(s == s2);//true
}
}