Java基础总结

Java是一门面向对象语言,封装、继承、多态是这个语言的基础核心,大部分的框架都是遵循这些核心演变而来,在这个过程中,出现了一共23种设计模式(也有的说24种,具体要看简单工厂模式算不算),基于这些设计模式,又有着6大设计原则(也有的说7种),理解这些核心有助于在工作中解决需求经常变更、if-else判断、类的关系过于复杂等情况,能让我们用更低的成本获得更高的产出。

以下是个人的学习理解,如有不正确的地方,请指点一下。

设计原则


  1. 单一职责原则:一个类的职责功能在业务上要只负责某一方面,不要所有都让这个类负责,也就是不要复杂化,根据业务情况让它只完成自己负责的那块。
  2. 开放-封闭原则:对修改封闭,增加开放,有新的需求变动时,可以通过增加新的类即可完成,无须修改原有的代码。
  3. 依赖倒转原则:依赖外部对象时,不要依赖具体的实现类,而是其接口或抽象类,具体就是类似标准的SSM架构一样,在Controller层引入Service层的接口,而不会直接指定某个实现的类型,在日后发生改动时,可以以最小代价修改代码。
  4. 里氏代换原则:对于计算机软件而言,如果使用的是一个父类,那么一定适用于子类,并且软件察觉不出其中的差别,白话来说,就是向上转型,一个方法的参数需要一个父类,即使传入它的子类也可以正常执行。
  5. 迪米特法则:也叫最少知道原则,一个类,与外部的联系越少越好,这里的联系指的的是依赖,类似在Controller层注入多个不同的对象,这会让Controller的关系变得复杂,存在一个严重的耦合,所以会通过一个中间类去关联这些依赖对象,而Controller只关心中间类提供的方法即可。
  6. 合成/聚合复用原则:需要某一个类的方法时,优先使用对象的合成/聚合,会使类的关系变得简单,这里的合成/聚合指的就是注入依赖某个对象,根据不同的演变类型拥有各自的父类,不要强硬的通过继承互相关联在一起。
  7. 接口单一原则:本质上和单一职责原则很相似,都是职责越简单越好,接口单一原则针对的是接口,而单一职责原则针对的是类。

 

设计模式


 

  1. 简单工厂模式:将类创建的步骤封装在一个类中,根据外部传入的条件判断生成不同的对象并返回,由于破坏了开放-封闭原则,所以对于是否属于设计模式中的一种存在争议,但是可以通过反射技术来解除if-else的问题。
  2. 策略模式:将不同的算法抽象出一个父类或接口,根据不同的情况实现多个子类,在外部使用时通过父类调用方法,不用去关心具体的实现类。
  3. 装饰模式:在不改变原有类的基础上增新的功能,根据新的需求创建包装对象,在包装方法中加入新增的的功能,可参考AOP。
  4. 代理模式:为其他对象提供一个代理,用于控制被代理对象,外部调用时通过代理对象,而不是直接通过被代理对象。
  5. 工厂方法模式:定义一个抽象工厂类,将创建具体类的过程放在了抽象工厂类的子类,如果有新的对象需要工厂管理时,增加新的子类并创建对应的类即可,这一种与简单工厂模式相比,其实就是改动的位置不同了,简单工厂模式改动的是工厂类,而工厂方法模式改动的是客户端调用。
  6. 原型模式:本质上就是clone对象,涉及到潜复制与深复制两种情况,浅复制会把类的对象引用也一并复制,而深复制会创建一个新的引用。
  7. 模板方法模式:在父类中定义抽象的逻辑流程,通过定义抽象方法,强制让其子类实现并重写具体逻辑,利于重用代码,去除重复无意义的部分。
  8. 外观模式:基于迪米特法则演变而来,利用一个中间类关联大多数的类,客户端只需要关心这个中间类即可,减少类于类之间的耦合关系。
  9. 建造者模式:用于创建复杂的对象,但是创建过程相对固定,只是细节上有所差异。类似于KFC等洋式快餐,制造一个麦辣鸡腿堡和照烧鸡腿堡都需要加热两个包饼,加上沙拉酱生菜等配料,但是最后放的肉确实不一样,这种在细节上有不同的地方。
  10. 观察者模式:也叫发布订阅模式,用于主题在事件发生时,通知所有订阅该事件的对象,将具体类与具体类的耦合关系转移到抽象类或接口,像是常用的MQ,以及在Spring环境中使用 ApplicationContext.publishEvent(事件对象)。
  11. 抽象工厂模式:与工厂方法模式的区别在于,抽象工厂模式可以创建多种系列的不同对象,一样是在子类工厂中定义创建的对象,对于切换不同不同的系列,也可以遵循开放-封闭原则的前提下,增加新的子类工厂和对应的实现类即可,但是对于增加新的系列就会很麻烦,需要改动类。
  12. 状态模式:用于封装 if-else 代码块,将每个条件情况封装为一个类,在类中判断是否满足处理情况,并定义下一个处理的对象,在需求变更的时候,只需要更改特定的类即可,对于整体安全起到一定保护作用。
  13. 适配器模式:解决旧模块不完全适用于当前新需求,通过创建一个适配类去兼容旧模块,从而复用代码,分为两种类适配器和对象适配器,由于单一继承的规则,主要使用对象适配器,与代理模式有一点类似,但是适配器模式是兼容旧模块,而代理模式在本质上并没有兼容被代理对象,只是加上一些自定义的操作。
  14. 备忘录模式:保存指定对象的自定义某些数据,只能通过发起类调用保存,同样的也只能由发起类读取。
  15. 组合模式:用于需求中体现部分与整体层次的结构时,或忽略单个对象与多个对象的不同,都是统一的调用这些对象,类似树的结构一样,分为透明方式和安全方式,透明方式相对简单便利,但有可能存在无用的实现方法,而安全方式则需要进一步的判断来区分枝节点还是叶节点。
  16. 迭代器模式:在对集合类型操作的时候很常用的遍历方式之一,只是现在由于工具类都封装好了,不用我们再去手动编写相关的迭代类,本质上就是自定义迭代类实现 Iterator,指定对特定的集合操作,实现对应的方法即可。
  17. 单例模式:不允许外部通过new实例化,要调用单例类提供的方法来获取对象,保证在内存中只有一个这样的对象,一共有五种方式实现,饿汉、懒汉、双重检查锁、静态内部类、枚举,各自有其有点及其缺点。
  18. 桥接模式:基于合成/聚合复用原则实现而来,通过优先使用合成/聚合的关系,而不是简单粗暴的继承类,将类的关系保持在较小规模,便于类的迭代发展。
  19. 命令模式:将请求封装为一个命令对象,客户端代码调用的时候通过中间的命令对象,再调用实际处理的对象,可以实现撤销/恢复、录入日志等操作。
  20. 职责链模式:用于解决 if-else 代码块的问题,将不同的条件状态封装为一个类,在类中判断是否满足当前类处理的条件,与状态模式的区别在于,职责链模式是在客户端代码中定义处理的顺序,而状态模式是在不同的状态类中定义。
  21. 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显示的相互引用,从而使其耦合松散,与外观模式的思路很相似,但是外观模式是单方面的调用,而中介者模式是有一个交互的体现。
  22. 享元模式:最大限度的共享一个类,分为内部状态和外部状态,随着情况环境而改变的是外部状态,而内部状态是相对固定不变的,这样可以避免重复的对象生成,从而节省内存空间。
  23. 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子(官方说明),个人理解这个模式非常少用,主要是对特殊的文本解析转换。
  24. 访问者模式:目的在于把处理从数据结构中分离出来,适合比较稳定的数据结构,如果增加新的数据结构会影响已有的算法对象,而算法经常变化,增加新的具体算法不用改动原有代码,属于设计模式当中最复杂的一种。

 


这些主要基于个人理解,用于加深自己的印象和理解,而且由于篇幅原因没有办法使用具体的代码例子说明每一个模式的情况,所以对于完全没有了解过的人不太友好,我是基于阅读大话设计模式这本书来学习的,如果造成大家的疑惑,请多多包含。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值