抽象类

6大设计原则之依赖倒置原则

左心房为你撑大大i 提交于 2020-03-20 20:31:53
依赖倒置原则的定义 依赖倒置原则的原始定义如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions. 翻译过来,包含如下三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖于细节 细节应该依赖于抽象 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块.抽象就是指 接口或抽象类,两者都不能被实例化;细节就是实现类. 依赖倒置原则在Java语言中表现为: 模块间的依赖通过抽象产生,实现类之间不发生直接依赖,其依赖关系是通过接口或抽象类产生的 接口或抽象类不依赖于实现类 实现类依赖接口或抽象类 依赖倒置原则的好处 采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性. 依赖的三种写法 在开发中,对象的依赖关系有三种方式来传递 1.构造函数传递依赖对象 在类中通过构造函数声明依赖对象,这种方式叫做构造函数注入 2

接口与抽象类的区别

一个人想着一个人 提交于 2020-03-20 20:09:28
3 月,跳不动了?>>> Java中接口与抽象类的区别? 抽象类:如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。如果一个类继承抽象类,那么就必须为基类中的抽象方法提供定义。如果不这么做,那导出类也为抽象类。 注意,抽象类和普通类的主要有三点区别: 1、抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。 2、抽象类不能用来创建对象; 3、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。 接口:可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、final等修饰会报编译错误)

软件设计模式学习(十一)桥接模式

笑着哭i 提交于 2020-03-17 20:45:11
桥接模式 桥接模式用一种很巧妙的方式处理继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效地控制了系统中类的个数。 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要四个形状类,如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有两种设计方案:第一种是为每一个行政都提供一套各种颜色的版本,这种方案使用的是多级继承结构,如果有四种形状,十二种颜色,则我们需要四十八个类。如果要增加新形状则同时也要具备所有的颜色,增加新的颜色也要为所有的形状添加对应颜色的子类;第二种提供四个形状类、十二种颜色类,根据实际对形状和颜色进行组合,此时系统中的类是十六个。如需增加新的形状或颜色,只需再增加一个新的形状类或颜色类即可。 很明显,对于有两个变化维度(即两个变化的原因)的系统,采用方案二可以使系统中类的个数更少,且系统扩展更为方便。 模式定义 将抽象部分与它的实现部分分离,使它们都可以独立地变化 模式结构 桥接模式包含如下几个角色: Abstraction(抽象类) 用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义一个Implementor类型对象使其与implementor之间具有关联关系,它可以包含抽象的业务方法,还可以包含具体的业务方法。 RefineAbstraction

抽象

末鹿安然 提交于 2020-03-17 17:53:44
抽象 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。 抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。 如何使用抽象类和抽象方法: 不能直接创建new抽象类对象。 必须用一个子类来继承抽象父类。 子类必须覆盖重写抽象父类当中所有的抽象方法。 覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。 创建子类对象进行使用。 package cn.itcast.day09.demo11;public abstract class Animal {​ // 这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。 public abstract void eat();​ // 这是普通的成员方法// public void normalMethod() {// }​} package cn.itcast.day09.demo11;​public class Cat extends Animal {​ @Override public void eat() { System.out.println("猫吃鱼"); }​} package cn.itcast.day09.demo11;​public class DemoMain {​ public static void main

设计模式——模板方法模式

柔情痞子 提交于 2020-03-17 11:07:50
本系列博客是自己在学习设计模式过程中收集整理的文章集合,其他文章参看 设计模式传送门 本文是转载文章 ,原文请参见 设计模式——模板方法设计模式 概念 在一个方法中定义了一个算法的骨架或者步骤,而将一些步骤延迟到子类中去实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某一些步骤。 该设计模式主要针对这样一种场景: 当要做一件事儿的时候,这件事儿的步骤是固定好的,但是每一个步骤的具体实现方式是不一定的。这样,我们可以把所有要做的事儿抽象到一个抽象类中,并在该类中定义一个模板方法 。 举例 去银行的营业厅办理业务需要以下步骤:1.取号、2.办业务、3.评价。三个步骤中取号和评价都是固定的流程,每个人要做的事儿都是一样的。但是办业务这个步骤根据每个人要办的事情不同所以需要有不同的实现。我们可以将整个办业务这件事儿封装成一个抽象类: /** * 模板方法设计模式的抽象类 * @author hollis */ public abstract class AbstractBusinessHandeler { /** * 模板方法 */ public final void execute(){ getRowNumber(); handle(); judge(); } /** * 取号 * @return */ private void getRowNumber(){

抽象类和接口

谁说胖子不能爱 提交于 2020-03-17 08:04:20
抽象类:在解决实际问题中,父类一般定义为抽象类,需要这个父类进行继承和多态的处理。存在意义就是被继承,是一种校验机制,预防出错。 抽象类用abstract关键字定义。 抽象类不能直接进行实例化,无法new对象。 抽象类被继承后,需要实现其中的所有抽象方法。 抽象类中可以包含非抽象方法和字段,这个非抽象方法和普通方法是一样的,可以被重写或被子类直接调用 抽象方法:用abstract关键字定义 1. 承载抽象方法的类必须定义为抽象类 2. 抽象方法不能是private的,因为其存在意义就是被重写 3. 抽象方法没有方法体即没有{},存在意义就是被子类重写。 接口:接口是抽象类的延伸,是一种纯粹的抽象类。接口使用interface关键字定义,一个类实现一个接口用implements关键字实现 1.接口中所有方法都是抽象方法,都没有方法体。 2.接口不能被单独实例化。 3.在接口中,方法必须定义为public(可省略)或者abstract(可省略),其他修饰权限是不被编译器认可的。 4.在接口中,所有的字段都是默认为静态常量(final static) 5.接口可以用来实现多继承。一个类可以实现多个接口 Class 类名 implements 接口1,接口2,,, 6.接口命名一般用大写I开头,一般使用adj词性的单词 来源: CSDN 作者: 苗秋秋 链接: https://blog

抽象类和接口的区别有哪些?

牧云@^-^@ 提交于 2020-03-17 01:20:34
1、抽象类要被子类继承,接口要被类实现 2、接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现 3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量 4、接口是设计的结果,抽象类是重构的结果 5、抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高 6、抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量 7、抽象类主要用来抽象类别,接口主要用来抽象功能 来源: https://www.cnblogs.com/szkzyw/archive/2020/03/16/12506155.html

关于面试常见问题的补充

痞子三分冷 提交于 2020-03-16 06:30:19
十八、this、super、static、final、instanceOf关键字 This:是当前类的实例,经常出现在方法和构造方法中,具体使用有以下三种情况: 1、 返回调用当前方法的对象的引用; 2、 在构造方法中调用当前类中的其他构造方法; 3、 在方法参数名和成员变量名相同时,用于区分参数名和成员变量名。 Super:this用于调用当前类的方法、属性和构造方法 ,而super调用父类的实例,super用于调用父类的方法、属性和构造方法,具体使用方法有以下两种: 1、 调用父类的构造方法; 2、 调用父类的实行和方法 Static:static关键字可以修饰方法、属性、自由块和静态块,使用static修饰这些成员时,可以理解为成员与类相关,通过 类名.成员 的形式调用;没有使用static修饰可以理解为成员与对象相关,通过 对象名.成员 的形式调用 注意: 1、 static不能用于修饰构造方法; 2、 在static修饰的方法中,不能调用没有static修饰的方法和属性,也不能使用super和this关键字; 3、 被static 修饰的属性被多个类对象共享,一个对象修改静态属性值后,会影响其他对象; 4、 静态块无论对象创建几次,静态块只执行一次; Final:用于修饰类、成员变量、成员方法 1、 final修饰的类: 该类不能被继承; 2、 final修饰的成员变量:

Java 修饰符

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-16 03:20:55
访问修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以private修饰符指定,在同一类内可见。 共有的,以public修饰符指定,对所有类可见。 受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。 非访问修饰符 static修饰符 静态变量: static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为static变量。 静态方法: static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。 fianl修饰符 final变量: final变量能被显式地初始化并且只能初始化一次。被声明为final的对象的引用不能指向不同的对象。但是final对象里的数据可以被改变。也就是说final对象的引用不能改变,但是里面的值可以改变。 final修饰符通常和static修饰符一起使用来创建类常量。 final方法: 类中的Final方法可以被子类继承,但是不能被子类修改。 final类: final类不能被继承 abstract修饰符 抽象类: 抽象类不能用来实例化对象

设计模式简介

流过昼夜 提交于 2020-03-16 01:03:27
设计模式学习记录,基于韩顺平老师的课程 B站视频 链接 设计模式 设计模式(design pattern)是对软件设计中 普遍存在 的(反复出现)的各种问题,所提出的 解决方案 。 设计模式七大原则 单一职责 降低类的复杂度,一个类只负责一项职责 提高类的可读性,可维护性 降低变更引起的风险 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在 代码级 违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则 接口隔离 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。 依赖倒转(倒置)Dependence Inversion Principle 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类 使用接口或抽象类的目的是制定好 规范 ,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成 注意: 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好 变量的生命类型尽量是抽象类或接口,这样我们的变量引用和实际对象之间就存在一个缓冲层