抽象方法

设计模式------工厂模式和抽象工厂模式

给你一囗甜甜゛ 提交于 2020-02-15 01:11:28
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口

设计模式------工厂模式和抽象工厂模式

孤人 提交于 2020-02-14 19:17:37
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口

Java学习笔记(八)面向对象---抽象类

此生再无相见时 提交于 2020-02-14 15:29:24
当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体。 抽象类的特点 抽象方法一定在抽象类中。 抽象方法和抽象类都必须被abstract关键字修饰。 抽象类不可以用new创建对象,因为调用抽象方法没有意义。 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,才能建立子类对象调用。(如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。) abstract class Student { abstract void study(); abstract void read(); void sleep() { System.out.println("sleep"); } } class StudentClass1 extends Student { void study() { System.out.println("study Java"); } void read() { System.out.println("read book"); } } class StudentClass2 extends Student { void study() { System.out.println("study python"); } void read() { System.out.println("study magazine"); }

Java基础之final和abstract关键字

纵饮孤独 提交于 2020-02-14 02:09:53
final final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 修饰变量 (例如Math类的PI=3.1415926就是变量不可修改) 用final关键字修饰的成员(实例)变量或局部变量统称为final变量。final变量经常和static关键字一起使用,作为常量。用final关键字修饰的变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改(只读类型);如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 修饰方法 final关键字可以修饰方法,代表这个方法不可以被子类的方法重写(覆盖)。如果你认为一个方法的功能已经足够完整了,继承它的类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。 关于private和final关键字还有一点联系,这就是类中所有的private方法都隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它。 修饰类 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰

设计模式-工厂三姐妹

陌路散爱 提交于 2020-02-14 00:12:17
首先明确什么是工厂模式: (1) 可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。 (2) 对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。 (3) 降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。 而且,工厂模式可以分为简单工厂模式、工厂方法模式、抽象工厂模式。下面是对这三种工厂模式的对比和分析。 【简单工厂模式】 1.概念: 从设计模式的类型上来说,简单工厂模式 是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GDF 设计模式之一。简单工厂 模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单的说, 简单工厂模式更多的使用了面向对象编程中的多态性,基类的引用可以指向派生类,并且调用派生的方法,即多态性。 2.如图所示

[Day11]接口、多态

蓝咒 提交于 2020-02-13 12:16:52
1.接口   (1)接口定义: interface关 键字 ,所在文件仍然是.java文件,编译后仍产生.class文件。    定义格式      public interface 接口名{       抽象方法1;       抽象方法2;       抽象方法3;     }    注意:a.接口中的方法均为 公共方法 访问的抽象方法。b.接口中 无法 定义普通的成员变量。   (2)类实现接口:类与接口的关系,实现使用 implements 。     格式:      class 类 implements 接口{       重写接口中的方法     }     在类实现中,该类将接口中的抽象方法继承过来,此时该类需要 重写 抽象方法,完成具体的逻辑。      类是现实事物的描述,接口是功能的集合 。   (3)接口中成员的特点     a.接口中的变量需要用固定的修饰符修饰 public static final ,接口中的变量称之为常量,不可改变。     b.接口中的方法需要用固定的修饰符修饰 public abstract 。     c.接口 不可以创建对象 。     d.子类必须覆盖掉接口中 所有 的抽象方法后,子类才可以实例化,否则子类是一个抽象类。   (4)接口的多实现:接口最重要的体现是 解决多继承的弊端。     弊端指的是在多继承时

java中易混淆的知识点

六眼飞鱼酱① 提交于 2020-02-11 12:31:31
声明抽象方法会造成以下两个结果: 如果一个类包含抽象方法,那么该类必须是抽象类。 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。 实现Java封装的步骤: 修改属性的可见性来限制对属性的访问(一般限制为private) 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法(get/set),用于对私有属性的访问 静态代码块: static{ } 实例化的时候在最先执行 super(): 调用父类的无参构造方法:super() 调用父类的有参构造方法:super(name,age) 调用父类的公有的方法:String name = super.name 调用父类的方法:super.say() final关键字: 使用final修饰的类不能被继承 使用final修饰的方法不能被子类覆盖 使用final修饰的变量不能被修改,即为常量 抽象类: 包含一个抽象方法的类是抽象类 抽象类和抽象方法都要用abstract关键字修饰 抽象方法只需要声明不需要实现 抽象类必须被子类(不是抽象类)重写类中的抽象方法 抽象类不能被实例化 java中多态性的表现: 方法的重载和重写 可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现(向上转型) 多态的实现方式: 方式一:重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 即外壳不变

接口和抽象类有什么区别

不想你离开。 提交于 2020-02-11 11:54:04
他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。 区别: 1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 2、抽象类要被子类继承,接口要被类实现。 3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现 4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。 5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。 6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果 7、抽象类里可以没有抽象方法 8、如果一个类里有抽象方法,那么这个类只能是抽象类 9、抽象方法要被实现,所以不能是静态的,也不能是私有的。 10、接口可继承接口,并可多继承接口,但类只能单根继承。 参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现 实现 子类使用extends关键字来继承抽象类。如果子类不 是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。 它需要提供接口中所有声明的方法的实现 构造器 抽象类可以有构造器

设计模式(思路)

怎甘沉沦 提交于 2020-02-10 20:31:23
设计模式七大原则: 单一责任 : 一个类尽量不要拥有太多的责任 接口隔离:接口设计的要尽量小,避免实现一个接口实现了多余的方法 依赖倒转:细节依赖于抽象,抽象不依赖于细节 里氏替换:尽量不要重写父类的方法 开闭原则:对扩展开放,对修改关闭 迪米特法则:最小知道原则,对尽量避免了解其他类的内部实现,减少耦合 合成复用原则:少用继承,而用依赖组合聚合 设计模式六大关系: 依赖 泛化 实现 聚合 组合 关联 创建型设计模式: 单例模式: 饿汉式实现 懒汉式实现 - double-check( 双重判断 ) 静态内部类实现 枚举实现 应用场景 : 需要频繁创建和销毁的对象,创建一次就够用而且需要频繁使用的对象(数据库访问,工具类) 源码中使用: RunTime 类 利用饿汉式单例模式实现, static 静态生成对象,系统调用时直接返回 . 工厂模式: 抽象工厂 : 工厂不只是一个类 而是一个工厂族,由接口定义,具体的想要的工厂实现由子类工厂提供。 源码中使用: Calendar 类 利用简单工厂模式 , 对外提供一个静态方法,用来根据日期和地域生产 Calendar 对象。 满足原则: 开闭原则 原型模式: 浅拷贝 : 实现 cloneable 接口,重写 clone() 方法 . 只会克隆对象的普通属性,如果有引用类型的属性则会都指向同一个地址引用 ( 克隆一个人

《Spring5核心原理与30个类手写实践 》第一章 阅读笔记

天涯浪子 提交于 2020-02-10 17:14:08
                                第一章 软件架构设计原则 1.1开闭原则-对扩开放,对修改关闭。开闭原则的核心思想就是面向抽象编程。 1.2依赖倒置原则。大家一定要切记:以抽象为基准比以细节为基准搭建起来的架构要稳定的多,因此在拿到需求之后,要面向接口编程,先顶层再细节的设计代码结构。 1.3单一职责原则。总体来说,就是一个类,接口或者方法只负责一项职责。 1.4接口隔离原则。建立单一接口,不要建立臃肿庞大的接口。尽量细化接口,接口中的方法尽量少(适度)。 1.5迪米特原则-最少知道原则。 1.6里氏替换原则。 1.7合成复用原则。 来源: https://www.cnblogs.com/la5qianer/p/12291435.html