抽象方法

从王者荣耀看设计模式(二十三.访问者模式)

大兔子大兔子 提交于 2020-01-24 16:02:04
从王者荣耀看设计模式 一.简介 在游戏中,根据场上状况给英雄配备合适的装备是赢的比赛的重要环节。对于刚开始玩王者荣耀(低端玩家like me),在选择装备的时候只会关注装备能给英雄带来多少伤害的增幅(装备属性),而大神级别玩家会仔细研究装备的详细描述 二.模式动机 在有些集合对象中可能存在多种不同类型的元素,而且不同的调用者在使用这些元素时也有所区别,这些调用者称为访问者。此时,可以使用访问者模式来进行系统设计。访问者模式为多个访问者访问集合对象中的多种元素提供了一种解决方案。在本实例中,集合中存储有装备"冰霜法杖"和"破魔刀"的属性和详细描述。低端玩家关注点(想要访问的对象)为集合中的属性。高端玩家关注点为集合中的详细描述。 三.访问者模式 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式 访问者模式的应用场景 在以下情况下可以使用访问者模式 ■ 一个对象结构包含很多类型的对象,希望对这些对象实施一些依赖其具体类型的操作。在访问者中针对每一种具体的类型都提供了一个访问操作,不同类型的对象可以有不同的访问操作 ■ 需要对一个对象结构中的对象进行很多不同的并且不相关的操作 ■ 对象结构中对象相应的类很少改变,但经常需要在此对象结构上定义新的操作

C# 面向对象之抽象类抽象方法

孤者浪人 提交于 2020-01-24 08:17:39
一、抽象 类 1.1、语法: 用abstract修饰类即为抽象类. 抽象类中可能包含抽象成员(方法,属性)这些都是共性的 【 可以为空,可以没有抽象成员,可以有 抽象成员 】 抽象类不能创建对象 【不能 实例化,不能New】 可以 被继承!可以创建数组 定义: 调用: 1.2、语义(了解): 抽象类表示一个抽象概念(数据和行为整体). 表达概念中拥有的共性行为数据. 抽象只表示做什么,拥有什么数据,但往往不表达具体做法,不表达数据具体取值 用于做基类,统一所有子类,管理子类 . 调用: 1.3 、什么时候适合用抽象类 》希望 做基类,对多个类进行统一管理【类将再分类】 》 使用抽象类的根本 原因(也是什么时候使用抽象方法) : 需求分析时找角色找共性时, 找的共性中 有 字段; 有方法, 方法中 有些方法 / 有些 行为 , 不同子类可能具体实现不同,父类中的这个行为就没必要实现!! 这个 行为需要写成抽象的,从而这个类也要变成抽象类。 二、抽象 方法 1》 定义:只有声明【定义】,没有实现的方法 就是抽象方法。 2》特点: 实现类 必须实现 所有 的抽象方法 B:A; 抽象方法 必须 放在抽象类中或者接口中。 但是 子类也是抽象,父类的抽象方法不实现可以吗? 可以。 3》 放在 抽象 类 中的抽象方法 必须 加 abstract 不能 私有 实现类实现 抽象方法的方法 必须 加

关键字: interface

僤鯓⒐⒋嵵緔 提交于 2020-01-23 16:11:41
1.使用说明: 1.接口使用interface来定义 2.Java中,接口和类是并列的两个结构 3.如何定义接口: 定义接口中的成员 3.1 JDK7及以前: 只能定义全局变量和抽象方法 >全局变量: public static final的,但是书写时,可以省略不写 >抽象方法: public abstract的 3.2 JDK8: 除了定义全局常量和抽象方法之外,还可以定义静态方法,默认方法 4.接口中不嫩定义构造器的! 意味着接口不可以实例化 5.Java开发中,接口通过让类取实现(implements)方式来使用. 如果实现类覆盖了接口中的所抽象方法,则此实现类就可以实例化 如果实现类没有覆盖接口中所的抽象方法,则此实现类仍为一个抽象类 6.Java类可以实现多个接口—> 弥补了Java单继承性的局限性 格式:class AA extends BB implements CC,DD,EE 7.接口与接口之间可以继承,而且可以多继承 8.接口的具体使用,体现多态性 9.接口,实际上可以看做是一种规范 体会: 1.接口使用上也满足多态性 2.接口,实际上就是定义了一种规范 来源: CSDN 作者: qq_44065556 链接: https://blog.csdn.net/qq_44065556/article/details/104075546

12. 抽象与密封

冷暖自知 提交于 2020-01-23 14:12:42
一、抽象类与抽象方法    1、抽象类与抽象方法声明 :   抽象类:在面向对象的概念中,所有的类都是通过对象来描述,但并不是所有的类都用来描述对象。如果一个类中没有足够的信息来描绘一个具体的对象,这样的类就是抽象类。   声明:他们都必须包含关键字 abstract ,并且抽象方法不能有方法体。抽象类中可以包含非抽象方法。   2、抽象类特性:   ( 1 )抽象类不能实例化,必须通过继承由派生类来实现其抽象方法。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。   ( 2 )抽象类的非抽象子类(即派生类)必须通过重载实现其继承的所有抽象方法和抽象服务器 。   3、抽象方法   ( 1 )抽象非是隐式的虚方法,只允许声明在抽象类中,不能使用static、private或virtual修饰符;   ( 2 )重写抽象方法时采用override 。   4、抽象方法和虚方法的区别:   虚方法有实现部分,并且派生类对其重写是可选的;抽象方法没有实现部分,并且强制非抽象派生类对其重写。   5、abstract修饰符   ( 1 )他可以和类、方法、属性、索引器及事件一起使用;   ( 2 )在类声明中使用 abstract 修饰符以表明这个类只能是其他类的基类;   ( 3 )他不能修饰静态方法或静态属性 。 二、密封类与密封方法   1、密封类   ( 1

使用抽象类应该注意的一些地方

本小妞迷上赌 提交于 2020-01-23 01:06:53
什么样的类为抽象类: 1、类被abstract修饰的类为抽象类,抽象类中可以用抽象方法,也可以有非抽象的方法。 2、 类中 有抽象方法的时候,这个类一定是抽象类,但是接口也有抽象方法,但不是类。 3、继承父类时,如果子类不需要重写父类的抽象方法时,子类一定是抽象类。 1): 2): 3): 4)抽象类有构造函数,但是不能new对象 5)抽象类是类的模版,当作父类就是用来被继承的 6)abstract不能和final,private,static一块使用 来源: CSDN 作者: weixin_42689746 链接: https://blog.csdn.net/weixin_42689746/article/details/103949623

33迭代器模式(Iterator Pattern)

不羁岁月 提交于 2020-01-22 12:48:17
动机(Motivate): 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。 使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方法。 意图(Intent): 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。-------《设计模式》GOF 结构图(Struct): 适用性: 1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.支持对聚合对象的多种遍历。 3.为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。 生活中的例子: 迭代器提供一种方法顺序访问一个集合对象中各个元素,而又不需要暴露该对象的内部表示。在早期的电视机中,一个拨盘用来改变频道。当改变频道时,需要手工转动拨盘移过每一个频道,而不论这个频道是否有信号。现在的电视机,使用[后一个]和[前一个]按钮。当按下[后一个]按钮时,将切换到下一个预置的频道。想象一下在陌生的城市中的旅店中看电视。当改变频道时,重要的不是几频道,而是节目内容。如果对一个频道的节目不感兴趣,那么可以换下一个频道,而不需要知道它是几频道。 代码实现: 在面向对象 的软件设计中

ruby 数据sql操作

北城余情 提交于 2020-01-22 11:02:46
ActiveRecord ActiveRecord 是 Rails 的 ORM 元件,負責與資料庫溝通,讓我們可以用物件導向的語法操作資料庫。在”打造 CRUD 應用程式”一章中提到的對應概念如下: 將資料庫表格(table) 對應到一個類別(classe) 類別方法就是操作表格(table) 將資料庫一列 (row) 對應到一個物件(object) 物件方法就是操作個別的資料(row) 將資料庫欄位(column) 對應到物件的屬性(object attribute) 因此,資料庫裡面的資料表,我們用一個 Model 類別來表示,而其中的一筆資料,就是一個 Model 物件。 ActiveRecord 這個函式庫實作了 Martin Fowler 的 Active Record 設計模式(Design Pattern) http://martinfowler.com/eaaCatalog/activeRecord.html ORM 與抽象滲漏法則 ORM (Object-relational mapping ) 是一種對映設關聯式資料與物件資料的程式技術。物件導向和從數學理論發展出來的關聯式資料庫,有著顯著的區別,而 ORM 正是解決這個不匹配問題所產生的工具。它可以讓你使用物件導向語法來操作關聯式資料庫,非常容易使用、撰碼十分有效率,不需要撰寫繁瑣的SQL語法,同時

Java面试题(白)QuickHit

吃可爱长大的小学妹 提交于 2020-01-22 09:19:47
1.抽象类的特点? 1)抽象方法和抽象类都必须被abstract关键字修饰。 2)抽象方法一定在抽象类中。 3) 抽象类不可以用new 创建和实例化对象。因为抽象类本身 4) 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。 2.abstract 关键字,和哪些关键字不能共存? final:被final修饰的类不能有子类(不能被继承)。而被abstract修饰的类一定是一个父类(一定要被继承) private: 抽象类中私有的抽象方法不被子类所知,就无法被复写;而抽象方法出现的就是需要被复写。 static:如果static 可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。 3.接口的特点? 1)接口不可实例化,可结合多态进行使用(接口 对象=new 对象()) 2)接口里的成员属性全部是以 public(公开)、static(静态)、final(最终) 修饰符修饰 3) 接口里的成员方法全部是以 public(公开)、abstract(抽象) 修饰符修饰 4)接口里不能包含普通方法 5)子类继承接口必须实现接口里的所有成员方法,除非子类也是抽象类 4.面向接口编程的好处? 1)更加抽象,更加面向对象 2)提高编程的灵活性 3)实现高内聚、低耦合,提高可维护性,降低系统维护成本。 5.抽象类和接口的区别? 抽象类

Java基础方面

这一生的挚爱 提交于 2020-01-21 17:42:58
Java基础方面: 1 、作用域 public,private,protected, 以及不写时的区别 答: 区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2 、 Anonymous Inner Class ( 匿名内部类 ) 是否可以 extends( 继承 ) 其它类,是否可以 implements( 实现 )interface( 接口 ) 答: 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3 、 Static Nested Class 和 Inner Class 的不同 答: Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4 、 & 和 && 的区别 答: &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5 、

C#.NET里面抽象类和接口有什么区别

。_饼干妹妹 提交于 2020-01-21 13:59:28
1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2(int para1); void Method3(string para2,string para3); } 那么,接口的本质是什么呢?或者说接口存在的意义是什么。我认为可以从以下两个视角考虑: 1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 例如,在自然界中,人都能吃饭,即“如果你是人,则必须能吃饭”。那么模拟到计算机程序中,就应该有一个IPerson(习惯上,接口名由“I”开头)接口,并有一个方法叫Eat(),然后我们规定,每一个表示“人”的类,必须实现IPerson接口,这就模拟了自然界“如果你是人,则必须能吃饭”这条规则。 从这里,我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一