oop 面向对象七大原则
1 开闭原则 :队扩展开发,对修改关闭 #原有功能块出现新需求 不改变原有功能 新增扩展
2 里氏替换原则 :继承必须确保父类锁所拥有的性质在子类中依然成立 #子类可以扩展添加新的功能 ,不改变父类原有功能
3 依赖倒置原则:面向接口编程 不要面向实现编程 #实现依赖接口 接口不应该依赖实现
4 单一职责原则:控制类的粒度大小 将对象解耦 #一个方法只干一件事情
5 接口隔离原则:要为各个类建立他们的专用接口
6 迪米特法则:A→B→C A尽量不要直接与C进行交互
7 合成服用原则:尽量使用组合或聚合等关联关系来实现 其次才是继承
1 单例模式
1饿汉懒汉式
//饿汉式单例 /* * 可能会浪费空间 该类未使用时就已创建 * */ public class HungryDemo { private static final HungryDemo HUNGRY_DEMO = new HungryDemo();//创建对象 private HungryDemo(){//私有化构造方法 } public static HungryDemo getHungryDemo(){ return HUNGRY_DEMO; } }
/* * 懒汉式 * * */ public class LazyDemo { private LazyDemo(){ //私有 if(lazyDemo!=null){ throw new RuntimeException("禁止使用反射破坏"); } } private volatile static LazyDemo lazyDemo;//volatile 同步 //双重检测锁机制DCL懒汉 仿制多线程时出现问题 //双重检测锁会被反射破坏 所以在私有构造方法中还要加一个检测 public static LazyDemo getLazyDemo(){ if(lazyDemo==null){ synchronized (LazyDemo.class){ if(lazyDemo==null){ lazyDemo = new LazyDemo(); /* * 1 分配内存空间 2执行构造方法 初始化对象 3 把对象指向这个空间 * 为什么加锁 保证多线程的时候可以按照 1 2 3的顺序执行 否则可能会出现分配了内存空间还没有初始化,就把这个对象指向了这个空间 * */ } } } return lazyDemo; } }
饿汉 懒汉 式 枚举
懒汉: 私有构造方法,该类未使用时就创建了对象 提供一个获得对象的方法
#运用场景
1 整个程序运行中只允许有一个类的实例 2 需要频发实例化 然后销毁的对象
3 创建对象时消耗过多,但是又经常用到
4 如:网站计数器 数据库连接池等
5 项目中 读取配置文件的类
2 工厂模式
作用:创建者调用者的分离 实例化对象不使用new 用工厂方法代替
简单工厂模式 工厂方法模式 抽象工厂模式
3 抽象工厂
定义:抽象工厂模式 提供了一个创建一些列相关或者互相以来对象的接口 无需指定他们具体的类