抽象方法

JavaSE-函数式编程接口

安稳与你 提交于 2019-12-10 12:05:58
目录 第一章:函数式接口 1.1 函数式接口介绍 1.2 格式 1.3 @FunctionalInterface注解 1.4 自定义函数式接口 第二章:函数式编程 2.1 Lambda延迟执行 2.2 使用Lambda作为参数和返回值 第三章:常用的函数式接口 3.1 Supplier接口 3.2 Consumer接口 3.3 Predicate接口 3.4 Function接口 第一章:函数式接口 1.1 函数式接口介绍 ​ 函数式接口在Java中是指: 有且仅有一个抽象方法的接口 。 ​ 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。 从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。 1.2 格式 只要确保接口中有且仅有一个抽象方法即可: 修饰符 interface 接口名称 { public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容 } 1.3 @FunctionalInterface注解 与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解:

案例分析:设计模式与代码的结构特性

ⅰ亾dé卋堺 提交于 2019-12-08 14:57:29
一、抽象工厂模式 在介绍抽象工厂模式,我们先简单回顾一下简单工厂模式与工厂方法模式。 1.工厂模式:针对一个系列的类,它们有很多的共同点,因此可以将他们称为一个系列的产品,也就是一个系列的类。因此使用一个工厂,用一个工厂创建函数去创建某个具体的类。 实现流程如下: 系列类—>工厂—>创建函数—>某个具体的类 2.工厂方法模式:针对一系列的类,使用一个抽象的工厂接口,之后为每个具体的类都编写一个工厂类,随后在每一个类中使用创建函数创建具体类。 实现流程如下: 系列类——>抽象工厂接口—>多个与系列对应的工厂类—>每个类的创建函数—>某一个具体的类 回顾这些我们可以看出,简单工厂模式是笼统的承包服务,不管有多少个类需要创建,全部都由一个工厂去完成;而工厂函数模式则是定制化服务,每一个工厂只能创建某一种特定的类,但是这些工厂统一遵循即抽象工厂接口的创建方法。 抽象工厂模式即 是 “分类之后的一对一服务”,我们有多个系列的类需要创建,让某一个工厂专门负责某一类对象的创建,另一个工厂负责另外一类的对象创建。简单来说,简单工厂模式是集中式生产;工厂方法模式是分散式生产;而抽象工厂模式则是对于同一系列的集中式生产,而对于不同系列的分散式生产(结合前两者的优点)。 二、抽象工厂模式的使用情景 当出现一系列的产品族,且这些类比较容易划分时,设计模式可以采用使用抽象工厂模式。原因如下

案例分析:设计模式与代码的结构特性——工厂方法模式

◇◆丶佛笑我妖孽 提交于 2019-12-07 15:08:26
什么是工厂方法模式    工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。工厂方法(Factory Method)模式定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。   工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 工厂方法模式的特点 工厂方法模式优点 (1)在工厂方法模式中,工厂方法用来创建客户所需要的产品

PHP中实现代码复用的Trait方法的一些特性

女生的网名这么多〃 提交于 2019-12-07 13:48:56
在整理“PHP基础”这篇文档时,看到了trait方法,感觉比较陌生,所以今天上午用两个小时的时间,查阅测试了trait方法的一些特性及用法,整理发布了这篇博客。 Trait 是 PHP5.4 中的新特性,是 PHP 多重继承的一种解决方案。例如,需要同时继承两个 Abstract Class , 这将会是件很麻烦的事情, Trait 就是为了解决这个问题。 trait 的简单使用 trait使用前需要先定义,trait的定义方式和类的定义方式差不多 trait first_trait { function first_method() { /* Code Here */ } function second_method() { /* Code Here */ } } 同时,如果要在 Class 中使用该 Trait ,那么需要使用 use 关键字 class first_class { // 注意这行,声明使用 first_trait use first_trait; } $obj = new first_class();// Executing the method from trait $obj->first_method(); // valid $obj->second_method(); // valid 我们在类中可以直接声明使用被定义好的trait,之后在类被实例化后

<C++实践系列>C++中的模板(template)

馋奶兔 提交于 2019-12-07 13:04:31
1. 简介 模板是C++在90年代引进的一个新概念,原本是为了对容器类(container classes)的支持 [1] ,但是现在模板产生的效果已经远非当初所能想象。 简单的讲,模板就是一种参数化(parameterized)的类或函数,也就是类的形态(成员、方法、布局等)或者函数的形态(参数、返回值等)可以被参数改变。更加神奇的是这里所说的参数,不光是我们传统函数中所说的数值形式的参数,还可以是一种类型(实际上稍微有一些了解的人,更多的会注意到使用类型作为参数,而往往忽略使用数值作为参数的情况)。 举个常用的例子来解释也许模板就从你脑袋里的一个模糊的概念变成活生生的代码了: 在C语言中,如果我们要比较两个数的大小,常常会定义两个宏: #define min(a,b) ((a)>(b)?(b):(a)) #define max(a,b) ((a)>(b)?(a):(b)) 这样你就可以在代码中: return min(10, 4); 或者: return min(5.3, 18.6); 这两个宏非常好用,但是在C++中,它们并不像在C中那样受欢迎。宏因为没有类型检查以及天生的不安全(例如如果代码写为min(a++, b--);则显然结果非你所愿),在C++中被inline函数替代。但是随着你将min/max改为函数,你立刻就会发现这个函数的局限性 ——

案例分析:设计模式与代码的结构特性

大兔子大兔子 提交于 2019-12-07 00:47:26
一、模式的定义与特点 1. 抽象工厂模式   抽象工厂模式是工厂方法模式的进一步延伸,由于它提供了功能更为强大的工厂类并且具备较好的可扩展性,在软件开发中得以广泛应用,尤其是在一些框架和API类库的设计中,例如在Java语言的AWT(抽象窗口工具包)中就使用了抽象工厂模式,它使用抽象工厂模式来实现在不同的操作系统中应用程序呈现与所在操作系统一致的外观界面。抽象工厂模式也是在软件开发中最常用的设计模式之一。   抽象工厂(Abstract Factory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。   抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。   使用抽象工厂模式一般要满足以下条件:   (1)系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。   (2)系统一次只可能消费其中某一族产品,即同族的产品一起使用。 2.主要优点   抽象工厂模式的主要优点如下:   (1)抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。   

抽象类

混江龙づ霸主 提交于 2019-12-06 18:54:30
什么情况下会需要用到抽象类 1、在编写某个父类时,发现某个方法的方法体无法给出具体的实现,但是父类有需要声明这个方法以代表事物的特征,那么此时就只能把这个方法声明为抽象方法,一旦某个类包含抽象方法,那么这个类就必须是抽象类 2、在编写某个父类时,可能没有包含抽象方法,但是不希望用户创建这个父类的对象,希望用户创建它的子类对象时,也可以把这个父类声明为抽象类 如何声明抽象类和抽象方法 抽象类的语法格式 1 【其他修饰符】 abstract class 抽象类名{ 2 3 } 抽象方法的语法格式 1 【其他修饰符】 abstract 返回值类型 方法名(【形参列表】); 抽象方法没有方法体 抽象类的特点 1、抽象类不能直接创建对象 2、抽象类就是用来被继承的,子类继承它时,必须重写/实现抽象类的所有抽象方法,否则子类也得是抽象类 3、抽象类也有构造器,给子类调用的 4、如果类中有抽象方法,那么必须是抽象类,但是反过来,抽象类中可以没有抽象方法 来源: https://www.cnblogs.com/daidai66/p/11997033.html

java面向对象的四个特性

江枫思渺然 提交于 2019-12-06 16:55:13
java面向对象编程是指:Java语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。另外,java是面向对象,但不是所有的都是对象,基本数据类型就不是对象,所以才会有封装类。 面向对象的特性有1)抽象,2)封装,3)继承,4)多态。   1)抽象   抽象类:包含抽象方法的类称之为抽象类,但不意味着抽象类中只能有抽象方法,它和普通类一样,可以拥有普通的成员变量、方法。     1、抽象类不能被实例化。抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。     2、 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。     3、抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。     4、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。     5、被定义为abstract的类需要被子类继承,但是被修饰为final的类是不能被继承和改写的,这两者是不能一起用来做修饰的。   接口:接口是一种特殊的抽象类。当使用类的时候,仅关注其行为,不关心继承时可以使用接口来代替类。接口中的方法都是抽象方法,abstract默认不写,所以抽象类中的抽象方法不能用访问修饰符

从BWM生产学习工厂模式

微笑、不失礼 提交于 2019-12-06 09:35:30
工厂模式应用非常之广,在 JDK 底层源码以及各大主流框架中随处可见,一般以 Factory 结尾命名的类,比如 Mybatis 中的 SqlSessionFactory , Spring 中的 BeanFactory 等,都是工厂模式的典型代表。 一、简单工厂模式 1.1 概念 简单工厂模式又称为静态工厂模式,属于设计模式中的创建型模式。简单工厂模式通过对外提供一个静态方法来统一为类创建实例,目的是实现类与类之间解耦:客户端不需要知道这个对象是如何被穿创建出来的,只需要调用简单工厂模式的方法来统一创建就可以了,从而明确了各个类的职责。 1.2 示例 简单工厂模式,以生产汽车轮胎为例。 1.2.1 实体类 轮胎通用属性 public class Tire { /** * 通用属性 */ private String common; } 奔驰车轮胎 包含通用属性外还有自己的特有属性 public class TireForBenz extends Tire{ Tire tire; /** * 特有属性 */ private String benz; public TireForBenz() { this.benz = "得到 Benz 轮胎"; } @Override public String toString() { return "["+this.benz +"]"; } }

Java之抽象类

帅比萌擦擦* 提交于 2019-12-06 06:27:05
抽象类概述 由来 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。 我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。 定义 抽象方法 : 没有方法体的方法。 抽象类: 包含抽象方法的类。 抽象类 使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。 定义格式: 代码举例; //定义抽象方法 public abstract void printName(); 抽象类 如果一个类包含抽象方法,那么该类必须是抽象类。 定义格式: 代码举例 //定义抽象类 public abstract class Student { //定义抽象方法 public abstract void printName(); } 抽象的使用 继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。 如何使用抽象类和抽象方法: 不能直接创建new抽象类对象。 必须用一个子类来继承抽象父类。 子类必须覆盖重写抽象父类当中所有的抽象方法。覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。