基本的设计模式概括

1.创建型设计模式
①工厂模式:
在原来的创建对象的时候需要对对象一个个的创建
不使用工厂模式会在创建对象的时候 创建多个对象 让每个之间的耦合性比较大 这个时候就要用到了工厂模式
优点:实现了对象之间的解耦
缺点:当增加一个对象或者是减少的时候 就需要改变工厂模式从而更改源码这种情况在现实的编码之中是不被允许的
适用情况:对象少的情况下 不存在对象的增加

②工厂方法模式
工厂模式不是23种模式之一 因为:不符合开闭原则
但是工厂模式会存在一定的局限性 就是增加修改对象的时候会出现要求更改相关的工厂源码这个时候就需要用到工厂方法模式 创建相关的类来进行 在增加的时候只需要增加相关的类 来进行更改 而不是去更改源码
优点:解决了工厂模式的缺点 不需要跟改源码 适合创建大量的工厂模式产生的对象
缺点:就是增加了相关的代码量 当很多个对象的时候就会出现大量的代码
适用情况:当存在大量的对象的时候

③抽象工厂模式

④单例模式
单例模式生产出的对象是一个 而且是相同的只能生产出一个 不能生产出多个 仅仅需要一个实例而不是多个怎么样才能保证呢 例如 线程池 连接池 工厂类等等
要点是:1.只能有一个实例 2.必须自行创建这个实例 必须自己向整个系统提供实例

饿汉式单例模式
在类加载的时候就进行创建 而不是创建对象的时候创建
优点:线程安全 而且是在类加载在的时候进行创建 速度相对较快一点
缺点:执行的效率可能有点低

懒汉式单例模式
不是在类加载的时候进行创建 而是在创建实例的时候才会被创建
优点:节省了资源 提高了资源的利用率
缺点:在多线程的情况下可能会出现多个实例 (这是不被单例模式允许的 不能出现多个实例)

双重检测懒汉式单例模式
1.因为懒汉式单例模式可能会出现多个实例所以就有了双重检测的出现
2.在对懒汉式的时候 会让线程睡一会到就会出现 实例化对象有多个
3. 这样就考虑来进行加上锁synchronized 这个时候需要加上一个确定的对象 加上这个类的.class
4.这样如果是可能会出现极小概率的情况就是二者都是空的时候都会进入到这个导致不同 这个时候就需要再进行判断是否为空了 如果是在里面加的话就会导致 锁没有 这个时候还是要在外面进行加
5.还是不行还有可能出现会有不同的可能这样的话就需要在类加载的时候进行加上volatile这个关键字
作用是 禁止重排序 这样才能是一个真正意义上的单例模式
优点:来检查懒汉式单例模式是否是到单例模式 就是效率高 不执行加锁的方法就不会实例化对象
缺点:就是还是会出现一些漏洞 需要加上volatile

静态内部类单例模式
资源利用率高 线程安全

一般情况下 单利模式中使用 饿汉式 和静态内部类单例模式就已经足够了 但是面试的时候可能会让你手写单例模式

⑤原型模式
即使存在一些情况 有可能会出现创建个实例化对象 但是实例化对象需要很多歌相同的但是如果是 再进行创建的话就是付出的代价太大了 这时候就只是对原来的进行小修小补 这个是时候就用到了相关的object对象的clone方法 就是去创建并进行克隆 使用到了clone

⑥建造者模式

2.结构型设计模式
①外观模式
就是业务层的那种模式 利用的是接口 然后进行相关的业务层的相关的子业务的查询

②装饰模式
在创建实例化对象的时候会出现相关的创建多个对象 但是会麻烦 就会导致面向多量的要求的时候鉴赏子类的创建的数量 如果使用继承的话就会产生很多的排列的顺序 就到很麻烦 所以才去装饰的模式 就出省去很多的麻烦 然后就和 InputStream in= new InputStream(new BufferedInputStream(new FileInputStream));
这个就是采用的是创世模式
优点:就是面对很多的要求的时候会出现创建很多的子类的数量的情况这个时候 就用这种模式 更加的灵活 可以进行增加不同的装饰 简化原有的类 让原有的类进行分解把核心的功能和装饰的功能分开
缺点:可能创建的类有点多 但是相比于继承得情况产生的类也不

你可能感兴趣的:(javaSE,java,后端,设计模式)