Java学习(面向对象设计原则+重构原则+互联网未来发展趋势)

微服务架构是入门级知识

  • 传统行业:使用SSM框架,数据库
  • 互联网企业:微服务架构,分布式系统开发,高可用,高并发,高性能
  • 面向对象编程思想:万物皆对象
  • 高内聚,低耦合

互联网

2020 5G普及
1.物联网会崛起
物物相连,连锁未连
2.大数据
不光是数据量大,更是维度广
3.数据挖掘
用户行为数据
ETL 工具:Kettle
商业的本质是盈利,赚钱,实现BI商业智能
4.AI 人工智能
5.区块链 本质就是一套分布式存储系统,异地多活分布式存储系统,就像一个数据库
6.云计算
用户体验:前端,由此产生
7.全栈工程师:拥有多种技能并能利用多种技能完成产品的人

这些都是基于分布式系统开发

图灵说:计算机的本质是,输入,输入

基础:计算机基础,计算机网络

感谢几位大神的优秀文章:

优快云夕虞大神【面向对象设计的七大设计原则详解】:
https://blog.youkuaiyun.com/qq_34760445/article/details/82931002#Law_of_Demeter_LoD_284
博客园鄙人薛某【面向对象六大设计原则】:https://www.cnblogs.com/yeya/p/10655760.html#%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99
博客园NaYonug大神【重构原则】:https://www.cnblogs.com/liuyoung/p/7819501.html

面向对象设计原则:

开口合里最单依:开闭原则,接口隔离原则,组合聚合原则,里氏替换原则,最少知道原则
单一职责原则

开放关闭原则(Open Closed Principle):

  • 是Java世界里最基础的设计原则
  • 原则:一个软件实体(模块,类,方法,函数)等应该对扩展开放,对修改关闭(封闭)
  • 当软件需要变化时,软件实体应尽量在不修改原有代码的情况下进行扩展
  • 扩展开放:
    某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
  • 修改关闭:
    某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求模块是修改关闭的。
遵循开闭原则的最好手段就是抽象:
  • 对软件系统中的不变的部分加以抽象,抽象成不变的接口,不变的接口可以应对未来的扩展;
  • 接口的最小功能设计原则,原有的接口要么可以应对未来的扩展;不足的部分可以通过定义新的接口来实现;
  • 设计之初需要考虑到未来所有可能发生变化的因素,比如未来有可能因为业务需要分成后台和前端的功能,这时设计之初就可以设计成两个接口,如果将来前端代码的业务发生变化,我们只需扩展前端接口的功能,或者修改前端接口的实现类即可,后台接口以及实现类就不会受到影响,这就是抽象的好处。
public interface BackCode{
    void writeCode();
}
public interface FrontCode{
    void writeCode();
}
  • 开放关闭原则的优点:
    稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。
    扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。

接口隔离原则(Interface Segregation Principle):

  • 原则:类之间的依赖关系建立在最小接口上,客户端依赖的接口尽可能小,不依赖它不需要的接口,解耦合。
    客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,接口细化,保证接口纯洁性,建立单一的接口。
注意控制接口的粒度:
  • 接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;
  • 接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来不方便

组合聚合原则(Composite/Aggregate Reuse Principle):

  • 尽量使用对象组合/聚合,不要使用类继承来达到复用的目的( 在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。)
  • 一般而言,如果两个类之间是"Has-A"关系应使用组合或聚合,如果是"Is-A"关系可使用继承。
  • 组合和聚合都是关联的特殊种类。

聚合表示整体和部分的关系,表示“拥有”。组合则是一种更强的“拥有”,部分和整体的生命周期一样。

组合的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个组合关系的成分对象是不能与另一个组合关系共享的。

组合是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合(Aggregation by Reference)。

在面向对象设计中,有两种基本的办法可以实现复用:第一种是通过组合/聚合,第二种就是通过继承。

只有当以下的条件全部被满足时,才应当使用继承关系:

1)派生类是基类的一个特殊种类,而不是基类的一个角色,也就是区分"Has-A"和"Is-A"。只有"Is-A"关系才符合继承关系,"Has-A"关系应当用聚合来描述。

2)永远不会出现需要将派生类换成另外一个类的派生类的情况。如果不能肯定将来是否会变成另外一个派生类的话,就不要使用继承。

3)派生类具有扩展基类的责任,而不是具有置换掉(override)或注销掉(Nullify)基类的责任。如果一个派生类需要大量的置换掉基类的行为,那么这个类就不应该是这个基类的派生类。

4)只有在分类学角度上有意义时,才可以使用继承。

组合/聚合优缺点:

优点:

1.新对象存取子对象的唯一方法是通过子对象的接口。
2.这种复用是黑箱复用,因为子对象的内部细节是新对象所看不见的。
3.这种复用更好地支持封装性。
4.这种复用实现上的相互依赖性比较小。
5.每一个新的类可以将焦点集中在一个任务上。
6.这种复用可以在运行时间内动态进行,新对象可以动态的引用与子对象类型相同的对象。
7.作为复用手段可以应用到几乎任何环境中去。
缺点: 就是系统中会有较多的对象需要管理。

继承优缺点:

优点:

新的实现较为容易,因为基类的大部分功能可以通过继承的关系自动进入派生类。
修改和扩展继承而来的实现较为容易。
缺点:

继承复用破坏封装性,因为继承将基类的实现细节暴露给派生类。由于基类的内部细节常常是对于派生类透明的,所以这种复用是透明的复用,又称“白箱”复用。

如果基类发生改变,那么派生类的实现也不得不发生改变。

从基类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。

里氏替换原则(Liskov Substitution Principle):

  • 原则:所有引用基类的地方,必须能透明地使用其子类的对象(如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的行为都没有发生变化,那么类型T2是类型T1的子类型)
    2.只要父类出现的地方,子类就可以出现,替换为子类也不影响。但是反之不行。
    3.核心是抽象,抽象又依赖于继承。建立抽象,通过抽象建立规范,具体的实现在继承时替换掉。往往和开闭原则一起,通过接口和抽象的方式

单一职责原则(Single Responsibility Principle):

  • 两个完全不一样的功能不能放在一个类中,一个类应该是一组相关性很高的函数、数据的封装
  • 永远不要让一个类存在多个改变的理由,只能让一个类/接口/方法有且仅有一个职责
  • 是实现高内聚、低耦合的指导方针,是最简单却最难运用的原则,需要设计人员发现类的不同职责并将其分离
  • 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
  • 划分一个类的职责 因人而异,单一要根据个人的经验、具体的业务来定
  • 比如图片加载和缓存应该放在不同的类中
  • 单一职责原则的优点:
    类的复杂性降低,实现什么职责都有明确的定义;
    逻辑变得简单,类的可读性提高了,而且,因为逻辑简单,代码的可维护性也提高了;
    变更的风险降低,因为只会在单一的类中的修改。

依赖倒置原则(DIP):

1.原则:实现类直接不直接发生依赖关系,其依赖关系通过接口或抽象类产生,即:面向接口编程
2.java中,抽象指接口或抽象类,两者不能直接被实例化;细节是实现接口或继承抽象类的实现类,可以直接被实例化,new一个对象

迪米特原则(最少知道原则)(Law of Demeter )

概念理解):

重构原则:重改:改善既有代码设计

事不过三,三则重构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值