欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 2024年软件设计师中级(软考中级)详细笔记【6】(下午题)试题6 Java 23种设计模式解题技巧(分值15)

2024年软件设计师中级(软考中级)详细笔记【6】(下午题)试题6 Java 23种设计模式解题技巧(分值15)

2024/10/26 5:31:53 来源:https://blog.csdn.net/XFanny/article/details/143078263  浏览:    关键词:2024年软件设计师中级(软考中级)详细笔记【6】(下午题)试题6 Java 23种设计模式解题技巧(分值15)

目录

  • 前言
  • 试题6 设计模式
    • 6.1 理论知识
    • 6.2 解题知识点
    • 6.3 解题技巧
      • 零基础蒙题技巧
  • 结语


前言

在备考软件设计师中级考试的过程中,我遇到了些许挑战,也收获了宝贵的经验。为了帮助其他同样正在为这门考试(证书)奋斗的朋友们,我决定将我的笔记整理出来,与大家分享。这些笔记不仅包含了书本上的知识,还加入了我对重点和难点的个人理解以及考试技巧,力求帮助大家更加高效地复习。我希望这份笔记能够成为你备考路上的一份支持,也祝愿你在考试中取得理想的成绩👍👍👍

如果有写的不好或者需要改进的地方,恳请在评论区指正!🤓🤓🤓


试题6 设计模式

6.1 理论知识

基础理论知识请参考此文章:23种设计模式

6.2 解题知识点

1、了解类与类(接口)之间的关系——接口是一种特殊的类
(1)接口的概念:接口只是说明类应该做什么,但并不指定应该如何去做。在实际开发过程中,通过类来实现接口。接口一般只有方法名,没有方法体。实现接口就是让其既有方法名又有方法体。
(2)接口的声明:接口用关键字“interface”来声明。接口的形式跟类很相似。例1格式如下:

interface [接口名]{}

(3)接口的实现
实现接口的类表示例2如下:(接例1接口的声明)


class  [类名]  implements  [接口名]{}

(4)特殊的接口方法:接口中的方法只有方法名没有方法体。(注意:没有花括号)例3如下:

interface [接口名]{[返回类型void/String/] [方法名] (参数列表);
}

(5)接口类与其实现类的对应关系:接口的用处就是让类通过实现它来执行一定的功能。因此实现接口的类,要实现接口的类。对于实现类或接口类有方法或属性的缺失,则可以根据二者的对应关系进行补充。一般实现类的方法是对接口类方法的具体实现。

2、继承
(1)继承的概念:继承,就是在已有类(父类)的基础上进行扩展,从而产生新的类(子类)。父类拥有自己的属性和方法,这些子类都可以继承。子类除了拥有父类的属性和方法外,还可以有自己的特性。

(2)继承的表示:继承通过关键字“extends”表示。结构例4如下:

class [子类名] extends [父类名]{} 

(3)父类与子类之间的对应关系:子类的属性和方法有部分是从父类继承而来,一般而言,父类和子类之间同名的属性和方法具有一定的对应关系,子类也可以对父类的方法进行重写。
(4)super和this的使用
在继承关系中为了区分父类和子类,会用super代替父类指针,this代替子类指针。举例如下:

class [父类名] {[属性1][父类名][属性1]{	 属性1=1}
}
class [子类名]{[属性2][子类名][属性1],[属性2]{super[属性1]);		//这里的super([属性1])时父类带属性1参数的构造函数this.[属性2]=[属性2]//这里的this是当前类指针//加上this和super可以区分同名的属性或方法。子类可以利用super指针调用父类的属性和方法。}
}

3、了解类的结构——属性和构造函数

(1)默认构造函数和非默认的构造函数:对类实例化创建对象时,系统会调用构造函数对其所属成员进行初始化。
在JAVA中,一般以与类名同名的方法作为构造函数。在实际开发过程中,系统会默认不带参数的构造函数,如果需要带参数的构造函数,需要明确写出该构造函数。构造函数结构例5如下:

class [1]{[属性1]//[类1](){ }  //默认无参构造函数[1](属性1  形参1{this.属性1=形参1//一般这里的形参命名与属性名一致
}
}

(2)继承中的构造函数:实际上,在创建子类对象时,会先执行其父类的构造函数,然后执行子类的构造函数,最后完成对象的创建。即创建子类对象时,先调用父类构造函数,初始化继承自父类的成员,随后调用子类构造函数,初始化子类的成员。例6如下:

class [父类名]{[属性1][父类名](){[属性1]=10System.out.println(“这是父类构造函数”);}
}
class  [子类名]{[属性2][子类名](){[属性2]=20System.out.println(“这是子类构造函数”);}
}
//主函数测试
public class test{public static void main(String [] args){[子类名] [子类对象名]= new [子类名] ();
System.out.println([子类对象名] .[属性1]+“ ”+[子类对象名] .[属性2]);}
}
//这里的输出结构应该是:
//	这是父类构造函数
//	这是子类构造函数
//	10 20

(3)get方法和set方法
在JAVA中会有对类中属性的get和set方法。在实际开发过程中,会对类的属性设定私有private限定,只有本类中的方法可以访问,拒绝其他类的访问。同时,会在本类中设定get()和set()方法,对相关属性进行操作。这些在开发工具中,有时候会默认自动给出。结构如下所示:

class [类名]{private [数据类型] [属性1]public [数据返回类型] get属性1(){return [属性1]}
public void set属性1[数据类型] [形参]{this.[属性1]=[形参]//这里的形参名一般与属性名一致}
}

(4)其他函数:类中函数成员格式如下所示:

[访问控制符] [返回类型] [方法名] (形参1类型 形参名1,形参2类型 形参名2,…){}

访问控制符可以为:private/public/default/protected/abstract
返回类型为该方法返回数据的数据类型。
返回语句 return [返回参数]
如果返回类型为void,即返回类型为空时,不需要return语句。

4、访问控制符/类修饰符

  • private
    (1)用private修饰的成员变量与成员方法只能在类的内部被访问,类的外部不能访问。
  • public
    (1)用public修饰数据表示所有的类都可以访问。
    (2)用public修饰类,也表示所有类中可以访问。
  • default
    (1)用default修饰成员数据表示只有用一个包里的类才能访问。
    (2)用default修饰类也表示只有一个包里的类才能访问。当在类前不加任何控制符时,默认就是default。
  • protected
    (1)用protected修饰成员数据表示不仅同一个包中的类可以访问,位于其他包中的子类也可以访问。
  • abstract
    (1)abstract可以用来修饰方法或类。具有一个或多个抽象方法的类,本身需要被定义为抽象类。抽象类不仅可以有抽象方法,还可以有具体方法。
    (2)抽象类可以被继承,如果其子类没有实现抽象类全部的抽象方法,则子类也是抽象类,需要用abstract修饰。
    (3)含有抽象方法的一定是抽象类,但抽象类可以没有抽象方法。抽象类不能实例化,不能new一个对象,但可以声明一个抽象类的变量指向具体的子类对象。

5、了解对象的实例化
(1)new一个对象
在主函数中,需要对类进行实例化才能够调用。而我们对类的实例化,一般用的是new。结构如下:
[类名] [对象名] = new [类名](参数列表);
(2)与超类相关的实例化

//创建子类对象并转到父类
[父类名] [对象名] = new [子类名](参数列表);

此时以对象名调用某方法(子类从父类直接继承而来的方法),虽然将父类对象句柄指向了子类对象,实际上操作的还是子类对象,只不过将对象句柄声明为父类的数据类型,此时编译器根据实际情况选择了子类的函数。

6、了解方法调用的格式: [对象名] . [方法名] ;
7、了解特殊的数据结构接口:List(表单)
(1)将元素放到指定集合的结尾:[表单名]. add([元素名]);
(2)将集合2放到指定集合1的指定位置:[表单名1].addAll([位置序号],[表单名2]);
(3)清除集合:[表单名].clear();
Iterator(迭代器)–用迭代器访问表单

6.3 解题技巧

  • 左父右子、左爷右孙

    父类名 对象名 = new 子类名();
    
  • new时,看构造体函数

    • 有参:写参数,看参数类型,找对应
    • 无参:直接写()
  • super没有点,即找父类构造函数

    • super()
    • super.xxx() 需要找父亲对应函数
  • 看到setXXX ( ) { },不会的前提下优先考虑this.xxx=xxx;

  • 有抽象方法一定有抽象类

零基础蒙题技巧

  • 以下基于没有基础的同学应付蒙题的技巧(只能达到50~90%蒙对),大概拿到9-12分,有基础的同学按照情景答题
  • 在文中找答案,前面空白去后面找对应的答案
    • 送分题:在一个类与另一个接口或者抽象类之间的填空,有Interface,写implements实现(记住有s!),有abstract抽象类,写extends继承,记住单继承多实现!继承只有一个,实现可以多个。
    • 先找父子,例如继承抽象类或者实现接口的关系,父亲有的抽象方法,继承子类的方法就会存在,不存在就抄进去。
    • 数据类型填写【文中找相同答案】:查找相同单词前面被定义的类型是什么?如果是一个单词出现多次并且告诉你了类型,记住是出现多次并且名字相同,那么可以盲填了,例如2020年下半年(2)填空,因为出题一般不会**的让你填写基本数据类型!
    • 有抽象方法一定是抽象类,抽象类不一定有抽象方法!如果看见一个类中有抽象方法abstract,那么此类一定是抽象类,有些空会出这种送分题!(零基础不理解的同学,记住就行!记住有抽象方法一定是抽象类,抽象类一定要用abstract修饰
    • 举例:2020年下半年试题六(教答题步骤看注释//)
    • (4)(5)对零基础的同学会有些难度,能蒙就蒙,不能就放了

在线支付是电子商务的一个重要环节,不同的电子商务平台提供了不同的支付接口。现在需要整合不同电子商务平台的支付接口,使得客户在不同平台上购物时,不需要关心具体的支付接口。拟采用中介者(Mediator)设计模式来实现该需求,所设计的类图如图6-1所示。

import java.util.*;interface WebServiceMediator { //1.1 看到(1)是接口,那么我们就去谁实现了这个WebServiceMediator接口,会发现只有ConcreteServiceMediator实现了这个接口,那么我们就去ConcreteServiceMediator这个类中找答案public   (1)  ;  // 1.4 答案:void buy(double money, WebService service)public void SetAmazon(WebService amazon);public void SetEbay(WebService ebay);
}abstract class WebService {  
// 2.1 看到这种定义数据类型的,你可以看看在同一个类中,有没有被定义,你会发现(2)的下一行就定义了mediator类型,如果你不确定,你继续看其他有这个单词mediator前面被定义的是什么类型,你会发现都是WebServiceMediator,那么就直接抄WebServiceMediator进去即可。protected   (2)   mediator; // (2)答案:WebServiceMediatorpublic abstract void SetMediator(WebServiceMediator mediator);// 3.1 是abstract抽象类,那么谁继承它,就去谁那里找,有两个继承它(一般有两个继承它,就去找两个相同的方法并且没有出现在这个抽象类中),找这个abstract class WebService抽象类中没有被定义的方法。public   (3)  ; // (3)答案:abstract void buyService(double money)public abstract void search(double money);
}
class ConcreteServiceMediator implements WebServiceMediator {private WebService amazon;private WebService ebay;public ConcreteServiceMediator() {amazon = null;ebay = null;}public void SetAmazon(WebService amazon) {  // 1.2 找(1)答案,这个出现了排除掉this.amazon = amazon;}public void SetEbay(WebService ebay) {  // 1.2 找(1)答案,这个也出现了,也可以排除掉this.ebay = ebay;}public void buy(double money, WebService service) { // 1.3 找(1)答案,ok这个没有出现在接口WebServiceMediator中,那么就填它!直接将整个方法抄进去,不要抄方法体if (service == amazon)amazon.search(money);elseebay.search(money);}
}class Amazon extends WebService {public void SetMediator(WebServiceMediator mediator) { // 3.2 出现了在抽象类abstract class WebService中可以排除this.mediator = mediator;}public void buyService(double money) { // 3.4 只剩下这个没有出现在抽象类中,有可能这个是答案,如果不确定就去另一个继承它的类EBay验证答案// 4.1【理解分析题】 因为是中介者模式,你购买东西就必须通过中介,而此方法中买这个服务,中介中有buy方法,那么就可以通过中介者来实现买,又因为SetMediator(WebServiceMediator mediator)定义的mediator都没有被用过,出题者一般不会给无用的信息出现多次并且还没有用过,因此这里可以通过中介者调用方法来实现买buy,即mediator.buy(money,this)(4)  ;  // 答案:mediator.buy(money,this)}public void search(double money) {  // 3.3 出现了可以排除System.out.println("Amazon receive:" + money);}
}
class Ebay extends WebService {public void SetMediator(WebServiceMediator mediator) { this.mediator = mediator; }public void buyService(double money) { // 3.5 你会发现,这个类也是两个方法都在抽象类中,只有这个buyService不在,那么答案只会是这个!// (5)【理解分析题】(5)  ;   // 答案:mediator.buy(money,this)} public void search(double money) {System.out.println("Ebay receive:" + money);}
}

后期可能还会继续更新……


结语

这份笔记由我在备考软件设计师中级考试的过程中编写,包含了我对知识点的理解与总结。如果您觉得这份笔记对您有帮助,并希望分享给更多的人,我十分乐意。但请在转载时务必注明出处,以尊重作者的劳动成果,感谢您的理解与支持

在此特别强调,本人编写笔记的所需部分资源均源于网络公开资源,旨在为大家提供一个学习和交流的内容,未经原作者授权,如若不慎侵犯您的合法权益,请您立即通过有效联系方式通知我,并附上相关证明材料。一旦核实无误,我将在第一时间删除涉事资源,全力保障您的合法权利不受损害。


  • 每篇一句:“为了未来好一点,此刻苦一点有什么。”
  • 如果觉得对您有用,请点个赞或者收藏鼓励我持续更新吧!
  • 恭喜您,已挑战成功第X关上,请前往第X关下进行挑战吧【整理中……】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com