设计模式学习(1)

面向对象设计原则

单一职责

每个类只有一个职责,并被完整的封装在类中,该原则用来控制类的粒度。

例如Mapper,controller都只负责一个业务。

开闭原则

应该对扩展开放,而对修改封闭,例如定义接口或是抽象类作为抽象层,其具体层子类可以多种多样。

里氏替换原则

子类只能扩展父类的功能,不能修改父类的功能。

依赖倒转原则

高层不应该依赖于底层,而是应该依赖于抽象,防止代码之间出现强关联强耦合,因此在Spring框架中使用的是接口定义职责,这样高层只需关注接口定义的方法,不用关心实现类,有框架自动管理。

接口隔离原则

接口的划分应该注意粒度,不要让一些类实现不必要的接口方法,如果出现一个实体类实现接口后,方法无意义,就应该进一步划分接口

合成复用原则

如果需要复用某个类的功能,优先考虑将其引入本类内部作为类的内部成员或是作为参数传入,而不是去继承,进一步降低耦合度,也防止A的实现细节暴露导致不安全。

迪米特原则(最小知识原则)

每个类或模块应该对其他类有着最小的知识或是最小的交互,降低耦合度。

创建型设计模式

工厂方法模式

如果直接使用new方式进行创建对象,不仅麻烦一旦出现改动,可能导致需要修改大量代码,如果使用工厂模式,由工厂进行创建则只需要修改工程中的代码即可,同时有些对象的创建可能需要参数,不是简单new即可。

简单工厂模式(不符合开闭原则),如果增加类,则需要修改工厂方法。

因此改进为工厂方法模型,将生产实体类作为一种职责,变化到抽象层,具体的实体类对应具体层实现。

抽象工厂模式

如果有多个个产品族,每个都创建一个工厂就不方便,因此直接创建一个抽象的顶层工厂,具体的产品族进行不同的实现,但是缺点在于违背了开闭原则,如果产品族中新增产品就需要修改抽象层。

建造者模式

建立一个Builder类,对需要创建的对象进行配置,最后在创建,注重的是一步一步配置的过程,且构造方法参数过多时应该使用,此时应该将类的全参构造方法设为私有,用建造者类进行配置

builder自身也应该保存参数,支持链式调用,build()处进行调用全参构造方法传入设定好的所有参数。

单例模式

就是只用一个实例的情况下,无需创建太多实体对象,使用一个或者静态方法就能满足需求。

饿汉

懒汉式(懒加载)

线程不安全,可能导致创建多个对象。

加锁版本,加锁后应该还要判断,否则可能有多个线程都已经判空并在等锁,导致创建多次

还需要再INSTANCE上加上volatile,以保证该对象在线程中的可见性

最优解是使用另一个静态内部类持有实例对象,既延迟加载又线程安全。

原型模式

使用原型对象进行拷贝生成新的对象(深拷贝),不能直接使用Java的拷贝方法,而是应该重写实现深拷贝,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值