一、面向对象
面向对象是Java编程中最外围的思维,基本特征:继承、封装、多态。
1、特色之封装
将构造、数据、操作封装在对象实体中,应用时能够不关注对象内部结构,只能拜访凋谢权限的性能入口,从而升高程序耦合水平,提供安全性和可继续维护性。
public class Concept01 { public static void main(String[] args) { Student student = new Student("张三","高三",29f); student.conclusion(); }}class Student { private String name ; private String grade ; private Float score ; public Student(String name, String grade, Float score) { this.name = name; this.grade = grade; this.score = score; } public void conclusion (){ System.out.println("姓名:"+this.getName()); System.out.println("年级:"+this.getGrade()); System.out.println("分数:"+this.getGrade()); if (this.getScore() >= 100.0f){ System.out.println("评语:本学期优等生"); } else { System.out.println("评语:本学期潜力股"); } }}
案例形容Student的学期总结,通过构造方法构建具体的学生对象,并且只通过conclusion办法获取学生学期评估。
2、特色之继承
子类除了提供本身的能力之外,还能够通过继承的形式获取父类凋谢的属性和办法,以加强本身的性能。
public class Concept02 { public static void main(String[] args) { // 判断 Digital 是 Phone 父类 System.out.println(Digital.class.isAssignableFrom(Phone.class)); }}class Digital {}class Phone extends Digital{}
这里通过isAssignableFrom办法判断Digital是Phone父类。
3、特色之多态
不同主体类对同一个动作给出不同的实现形式,多态也是Java形容设计模式的罕用伎俩,最间接的作用就是程序解耦。
public class Concept03 { public static void main(String[] args) { Animal animalDog = new Dog(); Animal animalCat = new Cat(); animalDog.voice(); animalCat.voice(); }}class Animal { public void voice () { System.out.println("Animal ... voice"); }}class Dog extends Animal { @Override public void voice() { System.out.println("Dog ... Wang wang"); }}class Cat extends Animal { @Override public void voice() { System.out.println("Cat ... Meow meow"); }}
通常动物都有发出声音的能力,然而不同动物声音不同,这里基于多态实现,不同动物的声音特色。
二、关系图谱
在理解面向对象之后,还须要了解一下根底的关系模型,在理论的业务中都是基于这些根底的关系解决场景问题。
1、继承与实现
继承关系:强调属性和办法从父类向子类的传承。实现关系:强调形容形象和具体实现的逻辑。
/** * 继承 */class classA {}class classB extends classA {}interface interfaceA {}interface interfaceB extends interfaceA {}/** * 实现 */class classC implements interfaceA,interfaceB{}
2、依赖与关联
依赖关系:罕用来形容办法局部变量或者入参,即类的办法中调用了另一个类。关联关系:类的成员变量是另一个类,比方常见的一对一,一对多关系。
/** * 依赖 */class RelyA {}class RelyB { public void depend (RelyA rely){}}/** * 关联 */class AssociateA {}class AssociateB { private AssociateA associateA ;}
3、组合与聚合
聚合关系:形容整体与局部的关系,然而局部不须要依赖整体存在。组合关系:形容整体与局部的关系,然而局部须要依赖整体存在。
/** * 聚合 */class ElementA {}class ElementB {}class Aggregation { private ElementA elementA ; private ElementB elementB ;}/** * 组合 */class PortionA{}class PortionB{}class Composition { private PortionA portionA ; private PortionB portionB ;}
三、模式与准则
在面对简单业务时,能够时常参考设计模式和根本准则,以此设计正当的业务构造,实现代码的高内聚低耦合,然而在一些特定场景下,也要果决的冲破这些模板或准则,能够更好的撑持业务。
1、设计模式
创立模式
形象对象实例化的创立过程,对不同类型的对象提供高效的治理形式与正当的创立伎俩。
- 单例模式
- 原型模式
- 工厂模式
- 建造者模式
构造模式
设计类的组装模式,正当的对象构造,有利于反对业务的继续迭代,构造会间接影响代码的可继续维护性。
- 代理模式
- 外观模式
- 适配器模式
- 装璜者模式
- 组合模式
- 享元模式
- 桥梁模式
行为模式
行为模式波及对象职责定义,通信合作,和最具体的业务逻辑实现,明确程序运行时的流程轨迹。
能够基于继承或实现的形式管制不同类的行为职责,即顶层形象管制行为,上层逐级做具体逻辑实现;或者间接聚合治理责任对象,做统一分配。
- 观察者模式
- 模版办法模式
- 策略模式
- 命令模式
- 调停者模式
- 备忘录模式
- 解释器模式
- 迭代器模式
- 状态模式
- 责任链模式
- 访问者模式
2、根本准则
- 开闭准则:在做代码结构设计时,应该思考对扩大凋谢,对批改敞开,抽象思维搭建构造,具体实现扩大细节。
- 繁多职责:一个类应该只负责一项职责;缩小代码一处变更引起的程序大规模改变状况,升高类的复杂度;
- 接口隔离:每一个接口应该是一种角色;尽量避免具体实现类中用不到然而又必须实现的办法;
- 依赖倒转:下层模块不应该依赖上层模块,形象逻辑不应该依赖具体细节,即中心思想是面向接口编程。
- 里氏替换:继承时遵循里氏替换准则,子类中尽量不要重写父类的办法,能够扩大父类的性能;
- 迪米特准则:起码晓得准则即类对象对其依赖的类晓得的越少越好,以此升高耦合水平;
- 组合/聚合复用:新对象应应用局部已有的对象,使其成为新对象组成部分,实现已有性能的复用,以此升高单个类的复杂程度。
四、业务利用
在业务开发中,很多简单的逻辑都是基于面向对象的思维做的设计和具体实现,然而在实际上业务是一直变动的,所以不论是罕用的Mvc模式,或者畛域设计,只有通过多个版本迭代,多人参加的开发,到最初代码在逻辑层面都会让人着迷。
也就是常说的一种景象:新人重构,老人一直修复问题,然而铁打的问题,流水的开发,凡是经验过重构的同学都晓得,所谓的大规模重构很难彻底解决问题,甚至这是个循环动作。所以业务代码更多是在那个版本周期内是正当的,站在一个开发的角度,这里也能够了解为笔者集体角度,通常从上面几个角度去思考具体的业务开发:
- 标准束缚
这是集体认为业务工程中最重要的根底,不论业务如何简单,都离不开与之相应的数据增删改查,所以对惯例根底操作做好对立代码格调治理,这样有助于他人疾速了解整体构造和逻辑。
这里格调指:接口命名,参数,组件,中间件等对立,以长久层为例,防止多个组件混用的状况,如果是周期绝对较长的我的项目,常常看到单是分页查问的实现逻辑都有多种状况。
- 可复用性
易变是业务自身的特点,所以高度复用的业务代码自身就存在很大的限度,例如常见的很多办法,为了适配各种场景,一直扩大入参,而后有些非凡业务也会进行非凡传参。
还有一些开发常说的,能用一个接口实现,相对不应用两个接口,看似很有共性,理论曾经走在挖坑的路上,多个性能申请同一个接口,即意味着任何接口的改变都要思考很多逻辑的适配。
所以从下层向下看,不用适度思考复用,从下向上看,底层的改变绝对较少,应该思考复用。
- 业务分层
从我的项目生命周期的角度思考,业务是一个迭代的过程,不须要适度前卫的设计,我的项目的生命周期是多久没人晓得,最稳当的做法是疾速迭代,产品和技术工程能疾速稳固的撑持业务倒退即可。
经典的业务分层治理是疾速迭代的根本撑持,例如罕用的Mvc模式,在简单的业务场景下能够再次细化治理,或者向畛域设计凑近。
- 流程分段
业务能够了解为流程治理,小的流程通常service中能够间接解决,然而简单流程则非常考究设计,一个根底思维就是分段治理,比拟经典的案例就是下单:构建结算页面时初始化订单-领取时订单提交-领取胜利才会执行订单。
- 细节问题
逻辑上的细节要继续谋求谨严,业务实现伎俩和思路适当放宽,流程经得起考验,底层实现正当的复用,组件抉择上应该站在高纬度,就根本足以。
五、源代码地址
GitHub·地址https://github.com/cicadasmile/java-base-parentGitEE·地址https://gitee.com/cicadasmile/java-base-parent
浏览标签
【Java根底】【设计模式】【构造与算法】【Linux零碎】【数据库】
【分布式架构】【微服务】【大数据组件】【SpringBoot进阶】【Spring&Boot根底】
【数据分析】【技术导图】【 职场】