java架构知识-设计模式与实践(学习笔记)

本文深入探讨了面向对象编程的五大原则SOLID,包括单一责任原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口分离原则。接着,介绍了设计模式的概念及其重要性,特别是代理模式,详细阐述了静态代理和动态代理的区别及应用场景。同时,讨论了面向切面编程(AOP)的基本思想,如何通过AOP实现核心业务与周边功能的解耦。最后,简单回顾了工厂模式和控制反转(IOC)的概念,强调了它们在降低耦合性和提高代码灵活性方面的作用。

一、OOP五大原则SOLID

单一责任原则
当需要修改某个类的时候原因有且只有一个(THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE)。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。
开放封闭原则
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热 插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

里氏替换原则
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出 现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规

依赖倒置原则

1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象

2. 抽象不应该依赖于细节,细节应该依赖于抽象

接口分离原则
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。 由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

                                          二、设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
三、代理模式
 
1,其他对象:目标对象,想要访问的对象,常被称为被委托对象或被代理对象。
2,提供一种代理:这里"一种"两个字比较重要,为什么不是提供一个呢?一种代表了某一类,即代理类和被 代理类必须实现同一接口,这个接口下的所有实现类都能被代理访问到,其实只是单纯的为了 实现代理访问功能,代理类不实现任何接口也能完成,不过针对于面向接口的编程,这种方式 更易于维护和扩展,代理类实现接口,不管目标对象怎么改或改成谁,代理类不需要任何修改 ,而且任何目标对象能使用的地方都能用代理去替换。
3,通过代理访问目标对象:代理类需要持有 目标对象的引用,这样用户可以通过代理类访问目标对象,实现 了用户与目标对象的解耦。
4,访问:访问二字说明代理对象的目的是访问被代理类,业务逻辑的具体执行与其无关,由被代理对象完成。
5,为什么要通过代理来访问:设计模式都是为了解决某一类的问题,可能目标对象不想让该用户访问或者是 该用户无法访问到目标对象,这样就需要一个第三者来建立他们的联系,如代理服务器情景, 被访问的服务器设置防火墙过滤掉某些地址的访问,这时用户就可以通过一个代理服务器来访 问目标,使得目标服务器不用对外暴露细节,用户也能访问到想访问的数据。
6,代理类功能增强:代理对象能直接访问到目标对象,这样它就能在调用目标对象的某个方法之前做一个预 处理,在调用方法之后进行一些结尾工作,这样就对目标对象的方法进行了增强。但是我们不 能说代理模式提供对象功能的增强,它的设计初衷是对代理对象施加控制,只是这种设计思路 能达到功能增强的目的。
 
静态代理
 
静态代理模式就是如下图所示,构造三个类实现他们的关系。
静态代理由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。

静态代理分析:静态代理确实处理了代码污染的问题;
1,重复的代码仍然分散在了各个方法中;
2,需要为每一个真实对象写一个代理对象;

动态代理
代理类在程序运行时创建的代理方式被成为动态代理。 我们上面静态代理的例子中,代理类(studentProxy)是自 己定义好的,在程序运行之前就已经编译完成。然而动态代理,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的指示动态生成的。相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。 也就是说,有了动态代理,我们只需要编写一份开始事务,提交事务的代码,然后再指明哪些方法需要事务就可以了,程序会自动地帮我们生成代理类
JDK动态代理
基于java的反射,适用于有接口的类
CGLIB动态代理
基于ASM字节码操纵技术,适用于没有接口的类

Version:0.9 StartHTML:0000000105 EndHTML:0000003624 StartFragment:0000000141 EndFragment:0000003584

四、面向切面编程(AOP
基本思想
AOP Aspect Oriental Program 面向切面编程
首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务所谓的周边功能,比如性能统计,日志,事务管理等等 周边功能在Spring的面向切面编程AOP思想里,即被定义为切面 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发然后把切面功能和核心业务功能 “编织在一起,这就叫AOP

五、工厂模式
简单工厂
简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之 一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想有必要把它作为第一个讲一下。

个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等),这 些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。
模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

抽象工厂
六、控制反转IOC
在传统的应用开发过程中,当我们需要一个A对象的时候,需要我们自己去new一个A对象,并且如果这个A对象在 创建过程中还依赖了B对象,我们还得自己去new这个B对象,这样就导致了newA对象的程序员还必须得知道B对象的存在,增大了类之间的耦合性,违反了依赖导致原则,不利于后续的拓展并且在传统的应用开发过程中,我们即使使用到了接口,但还是需要自己去new接口的实现类,因此并没有做到真正的解耦,并没有做到真正的面向接口编程
IoCInversion of Control,控制反转
思想就是利用工厂模式,设置一个对象的容器,将对象的创建,依赖的管理,生命周期的管理都交给容器来完成, 当我们需要一个对象A的时候,只需要使用类似于 A a = factory.get("A")的方式,从容器中拿A对象就可以了,至于 A对象在创建过程中还需要什么对象我们完全不用去考虑
使用接口的时候,我们只需要将接口的实现类放入IOC容器中,然后从容器中拿接口的实现就可以了,可以实现真正的解耦,真正的面向接口编程。
七、观察者模式
定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
八、Zookeeper
ZK简述
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在 Zookeeper上注册的那些观察者做出 相应 的反 应 , 从而 实现集群中类似Master/Slave管理模式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值