桥接模式(Bridge)
介绍:将抽象与实现分离开来,使它们可以独立变化。
关系图:
将品牌和类型分开。
- 品牌接口
public interface Brand { void info(); }
- 实现品牌接口
public class Apple implements Brand { @Override public void info() { System.out.print("苹果"); } }
public class Lenovo implements Brand { @Override public void info() { System.out.print("联想"); } }
电脑类型抽象类
public abstract class Computer { private Brand brand; public Computer(Brand brand) { this.brand = brand; } public void info(){ brand.info(); } }
继承电脑类型类
class Desktop extends Computer{ public Desktop(Brand brand) { super(brand); } @Override public void info() { super.info(); System.out.print("台式机"); } } class Laptop extends Computer{ public Laptop(Brand brand) { super(brand); } @Override public void info() { super.info(); System.out.print("笔记本"); } }
测试类
public class Test { public static void main(String[] args) { Computer computer =new Desktop(new Apple()) ; computer.info(); Computer computer1=new Laptop(new Lenovo()); computer1.info(); } } //苹果台式机联想笔记本
单例模式
//饿汉模式
public class SingletonDemo1 {
private SingletonDemo1(){}
private static SingletonDemo1 instance = new SingletonDemo1();
public static SingletonDemo1 getInstance(){
return instance;
}
}
//懒汉式
public class SingletonDemo2 {
//私有化构造器
private SingletonDemo2(){
}
//类初始化不立即加载该对象
private static SingletonDemo2 instance;
// synchronized 效率低 //JVM 指令重排,某些线程获得未实例化对象
public static synchronized SingletonDemo2 getInstance(){
if (instance==null){
instance = new SingletonDemo2();
}
return instance;
}
}
// 双重检测/懒汉式
public class SingletonDemo3 {
//
private SingletonDemo3(){
}
private volatile static SingletonDemo3 instance; //voaltile() 排除JVM指令重排产生的影响
public static SingletonDemo3 getInstance(){
if (instance==null){
synchronized (SingletonDemo3.class){ //线程竞争锁
if (instance==null){//竞争到后再判断对象是否实例化
instance=new SingletonDemo3(); //1.为 instance 分配内存空间
//1.初始化 instance
//3.将 instance 指向分配的内存地址
}
}
}
return instance;
}
}
//静态内部类实现
public class SingletonDemo4 {
private SingletonDemo4(){
}
private static class InnerClass{
private static final SingletonDemo4 instance =new SingletonDemo4();
}
//延迟加载
public static SingletonDemo4 getInstance(){
return InnerClass.instance;
}
}
//枚举实现
public enum SingletonDemo5 {
INSTANCE;
public SingletonDemo5 getInstance(){
return INSTANCE;
}
}