经验整理-21-设计模式-100-@

设计模式的根本目的是减少项目变化所造成的影响,这一点要牢牢记住!
工厂模式是把项目当中的变化点抽取封装出来

设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用的、可以解决特定问题的设计方法。
https://blog.csdn.net/qq_34337272/article/details/90487768#%E5%8D%95%E4%BE%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F

巧记23种模式:

1,创建型模式有五种:工厂方法模式 、抽象工厂模式 、单例模式 、建造者模式 、原型模式
口诀:单例工厂的原型建造者也写了一个抽象方法
解释:单例(
单例模式)工厂(工厂方法模式)的原型(原型模式)建造者(建造者模式)也写了一个抽象方法(抽象方法模式)---五种。

2,结构型模式有七中:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
口诀:组合代理适配器的装饰可以让侨胞享受外观
解释:组合(组合模式)代理(
代理模式)适配器(适配器模式)的装饰(装饰模式)可以让侨(桥接模式)胞享(享元模式)受外观(外观模式)---七种

3,行为型模式有十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
口诀:经过访问者和观察者迭代的解释,中介进入状态,想出一个策略模板,用备忘录,记录责任和命令,
解释:经过访问者(访问者模式)和观察者(模板方法模式)迭代(迭代模式)的解释(解释器模式),中介(中介者模式)进入状态(状态模式),想出一个策略(策略模式)模板(模板方法模式),用备忘录(备忘录模式),记录责任(责任链模式)和命令(命令模式),---十一种。

?为什么要使用设计模式?设计模式举例,项目中哪里用到了?

答1:
实现了重用设计,重用前人的设计;
能从直接创建具体产品对象的尴尬局面摆脱出来,使用者只需要传入工厂类的参数,对于如何创建对象(逻辑)不关心。
每个模式一种规则,可以让其他人更容易理解你的想法和做法。

设计模式能降低系统中类与类之间的耦合度。比如工厂模式,使依赖类只需知道被依赖类所实现的接口或继承的抽象类

答1:

单例(饱汉模式、饥汉模式)----重点看安全版的懒()汉式(用到时才创建)

1、构造方法私有化,除了自己类中能创建外其他地方都不能创建(构造和成员变量都得私有化
2、在自己的类中创建一个单实例(饱汉模式是一出来就创建创建单实例,而饥汉模式需要的时候才创建)
3、提供一个方法获取该实例对象(创建时需要进行方法同步)

建议写一个安全版的懒汉式(用到时才创建),这样能体现出多线程安全意识:

public class X {
    private static X x;
    private X() {
    }
    public static X getX() {
        if (x == null) {
            synchronized (X.class) {
                if (x == null) {
                    x = new X();
                }
            }
        }
        return x;
    }
}

项目中的应用:数据库连接池/日志对象。因为数据库连接池是一种数据库资源,使用数据库连接池的主要是为了节省打开或者关闭数据库连接所造成的效率损耗,这种效率上的损耗还是非常昂贵的,使用单例设计模式可以大大降低这种损耗。

使用单例模式的好处:

扫描二维码关注公众号,回复: 9181746 查看本文章
  • 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;
  • 由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。

项目中使用举例:spring容器默认是单例,好处是为了节约内存,不重复创建对象。

?的作用或优点或应用场景?

假如我先有一个网银充值公共工具类,使用了单例设计模式,每次调用就不会新建对象,节省了内存资源

工厂模式:Spring IOC就是使用了工厂模式.      

?工作原理或实现原理?

 对象的创建交给一个工厂去创建。分为简单工厂模式.工厂方法模式.
简单工厂模式.:建立一个工厂类,对实现了同一接口的一些类进行实例的创建,按参数区分。


工厂方法模式:创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

?的作用或优点或应用场景?

假如我先有一个网银充值公共工具类,使用了工厂方法模式;后面有需求变更,新增了一个快捷充值工具类,我复用工厂方法思想,只需要新增一个工厂方法和新的快捷充值类就好了。

源码设计到的:

代理模式:Spring AOP就是使用的动态代理。

?工作原理或实现原理?

通过中介代理,控制目标对象的访问,可以详细访问目标对象的方法。不直接访问目标对象
1.静态代理模式:静态代理需要自己生成代理类
2.动态代理模式:不需要生成代理类,实现InvocationHandler,有两种,cglib动态代理和JDK动态代理:
2.1JDK动态代理(Java内部的反射机制来实现的---前提,必须是目标类基于统一的接口 )--需要有顶层接口才能使用,但是在只有顶层接口的时候也可以使用,常见是mybatis的mapper文件是代理。使用反射完成。使用了动态生成字节码技术。
2.2JDK动态代理(借助asm字节码控制来实现的---可以直接代理类)--可以直接代理类,使用字节码技术,不能对 final类进行继承。使用了动态生成字节码技术。

动态有两种代理模式:cglib动态代理和JDK动态代理
JDK动态代理有一个致命缺陷是,只能对接口进行代理。如果要代理的类为一个普通类、没有接口,那么Java动态代理就没法使用了。
CGLIB相比于JDK动态代理更加强大,cglib会自动创建一个子类而继承你的父类。从而达到接口实现获取被代理对象信息的目的!

发布了39 篇原创文章 · 获赞 0 · 访问量 768

猜你喜欢

转载自blog.csdn.net/qq_15458763/article/details/104032470