20-Spring_Patterns-2

1.工厂模式

这里学到了,简单工程,工厂方法,抽象工厂

在工厂方法&抽象工厂里面,用到了Interface作间接隔离

后2种,必须得在一定要的比较大的项目中才能感受到......,一看就是为了提高维护性,扩展性做的设计

spring底层bean注入也是抽象工厂

2.补习一下SE的知识

一个func,返回值为interfac名的时候,其实就是一个implements了以后的实现类

这样写没有错,没有问题,但是有一个缺点,不易维护,因为不是很直观的看懂,不像OC

OC里面不管是func还是api都比较长,很好看懂

    类名作返回值类型:返回的是该类的对象
    抽象类名作返回值类型:返回的是该抽象类的子类对象
    接口名作返回值类型:返回的是该接口的实现类的对象

3.代理模式(静态)

写一个委托类

写一个代理类

通过构造方法,把委托类传到代理类,这样代理类就可以自己封装一个方法,把实际上委托类实现的,变成自己实现的......自己写代码给自己看,有时候确实有点搞不懂,这有啥意思...

4.动态代理

          1.JDK自带动态代理

step:
    1.new委托对象
    2.传入委托对象,创建一个h andler
    3.获得委托对象的classloader
    4.获得委托对象的interfaces
    5.强转成一个相同类的代理对象,传入值:
        classLoader
        interfaces
        handler
最后强转,就得到了一个代理类

          2.cglib动态代理

spring动态代理,是根据委托类是否有接口
来判断用Jdk动态代理,还是用cglib动态代理

Spring中
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

JDK动态代理只能对实现了接口的类生成代理,而不能针对类 
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 

5.建造者模式

SpringBuilder
有一点类似工厂,但是其对内部成员有要求,因为其内部成员是有关联的
注重零件装配的顺序

6.模板方法

其实这里就是一个减少复用,采用子类extends父类的这种方法,来通过重写,实现不同的业务

把相同的方法写在父类,然后不同实现的方法,在子类重写

这种用到的特别多

比如之前在Android上学习的BaseFragment,BaseActivity;NavigationBar这种类似的

7.适配器

这里的适配器,我个人觉得要写还是需要一定水平的

adapter起到了一个转换的作用,相当于桥梁作用

adapter太广泛了,很多都可以被称之为"adapter"

8.外观模式 / 门面模式

其实就是封装.......

9.原型设计模式

这里...实属不知道有哪些应用场景,在实际写代码的过程中,应该用到的不多,这里讲一些远离

实现cloneable接口以后

可以对数据进行:深克隆 & 浅克隆

demo:

         有2个obj指向同一个data,这个data有2个值:  string & ArrayList

当系统默认进行浅拷贝以后,obj1被obj2拷贝,只会copy基本类型,而不会copy引用类型,但是在这里string加了final,所以string是会被copy一份的,但是在这里因为默认的是浅拷贝,所以引用类型的arraylist不会被copy一份,而是obj2与obj1共享那一份;如果obj2是深拷贝的话,那么string和arraylist都是单独的一份,因为深拷贝为obj2开辟了一块新的内存地址.

所以,浅拷贝是2个obj共同引用一个数据,所以自然会有可能引起线程安全问题.

 

10.设计模式几个需要注意的地方

我个人来总结一下以上说的很多设计模式:

   1.低耦合度 --> 用Interface这种,降低耦合度,提高内聚性

   2.减少冗余代码,代码模块化,提高复用性

   3.最好要具备一定的可扩展性,也就是要根据当前的业务,具备一定的策略性

   4.有一些模式,需要隐藏本体,使用代理,我暂时不知道为什么要这样做.....自己写个自己看的代码,用这种模式不是自己逗自己吗?

   5.关于extends和interface我觉得这2个东西都很好用,具体的话,看场景吧interface肯定通用性高一些

总结:

      关于设计模式,这里讲的说实话,是学不到很多具体的东西的,这些只有在落手于真正的项目的时候,才能学到如何去搭配好的模式去解决具体的问题.

你看视频,看书,看文章,能学到知识,以及少量的代码能力,真正能提高自己的代码的能力,还是需要手动去敲代码,纸上得来终觉浅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值