首页 > 其他分享 >设计模式习题

设计模式习题

时间:2024-04-23 20:12:24浏览次数:21  
标签:---- 原则 子类 复用 --- 习题 设计模式 方法

面向对象设计原则

1.配置文件可以不修改源代码就更换驱动程序---开闭原则----------功能需求变化了,需求扩展,不改代码
2.A是B父类。C定义了A的对象obj为C的成员变量,C里还有一个setA的方法给obj变量赋值----里氏替换原则----通过父类的对象调用子类方法,可以替换父类
3.子类有新方法父类没有,父类变量去调用子类方法时,如果调用子类扩展的方法会报错---里氏替换原则---透明替换就是不报错
4.针对接口而非实现编程--针对抽象而非具体类编程---开闭原则
5.优先使用聚合组合而非继承,更加灵活容易扩展--合成复用原则
6. 高层不应该依赖于低层(抽象层,实现层),低层/实现应该依赖高层/抽象
7.开闭原则是可复用的基础--extension,modification
8.里氏替换原则---base class object , subclass object
9.依赖倒转原则---abstraction, implementation
10.继承复用和组合复用----继承复用,子类可以继承父类方法属性,而且可以选择性继承;-----继承复用会打破系统封装性因为父类都曝光在子类面前----合成复用,聚合,组合关系是将一个类的对象作为另一个类的成员变量(可以调用其方法)/成为新对象的一部分------合成复用是黑箱复用,因为没有暴露内部内容
11.应该着重针对抽象编程-----依赖倒转原则---因此说依赖关系集中于抽象类就是符合原则的
12.DB为链接数据库类,DAO为操作数据库内容类。二者关系应该是关联还是继承?---关联Association----合成复用原则
13.每个客户端需要一个更小的接口,只需要与之相关的方法---接口隔离原则---但并不是说只定义一个方法,而是需要的那些方法--应该说实现一个功能/代表一个角色
14.Demeter法则-----降低类之间的耦合度----不需要把类,函数设置为公有函数,毫无道理
15.Demeter法则的运用:客户端通过第三方间接访问远程对象(代理模式)

创建设计模式

1.面向对象的模式优势:可以复用成功的设计
2.简单工厂模式-----根据参数不同返回不同类的实例/子类对象----静态工厂方法(可以从static识别)---在简单工厂模式中,工厂类负责创建具体产品的实例。这些具体产品类通常都实现了一个共同的接口或者继承自一个抽象类。在这种情况下,抽象类或者接口定义了产品族的公共接口或行为。
选项 D 中提到了 Cipher 类中的 encrypt() 方法必须是一个抽象方法,这是错误的。在简单工厂模式中,并不要求抽象产品类的所有方法都是抽象的。具体产品类可以有自己的实现逻辑,而不必全部依赖于抽象方法。因此,encrypt() 方法可以是一个具体的方法,用于实现加密逻辑,而不必要求它是一个抽象方法

3.工厂方法---------不如抽象工厂一般化和抽象化(越一般化越抽象化)
4.抽象工厂--多于一个产品族被使用---等级结构更加简便,因为创建的模块比工厂方法少----增加产品族符合开闭原则,但增加等级结构不符合开闭原则,所以它不始终符合原则
5.一系列产品就是一个产品族---一个产品等级结构是一组有继承关系的产品
6.一般不指明,默认工厂模式为工厂方法---方法不能改静态,静态方法不能修改子类---当工厂方法是实例方法时,它可以被子类重写,从而允许每个具体的子类提供自己的工厂逻辑,以创建特定类型的产品。这种灵活性使得工厂方法模式更容易扩展和维护,因为它遵循了开闭原则,即对扩展开放,对修改关闭。如果工厂方法是静态的,就无法实现这种灵活性,因为静态方法不能被子类重写
7.建造者模式将构建与设计剥离---客户端不需知道创建细节----具体建造者之间没有依赖关系
8.原型模式---原型模式通过创建一个原型对象,然后通过复制这个原型对象来创建更多相同类型的对象,从而指定要创建的对象类型----每个类都需要配置一个克隆方法----浅拷贝只复制考虑的对象,而不是它引用的对象,这意味着其中的成员对象不会被复制。----深复制也可以,但是需要写复杂代码----如果一个类要支持克隆,它必须实现Cloneable接口-----在子类的clone()方法中,通常会调用super.clone()来获得父类的浅拷贝,然后再根据需要修改或者添加新的属性----通常,x.clone() != x,x.clone().getClass() == x.getClass()

9.单例模式适用---确保一个类只能创建唯一实例对象----可以被继承---必须本身创建,必须开发给整个系统-----

标签:----,原则,子类,复用,---,习题,设计模式,方法
From: https://www.cnblogs.com/xiyiji/p/18153092

相关文章

  • 图解设计模式
    策略模式状态模式职责链模式职责链模式组装完成后,运行的是第一个类,被连接的类会依次执行职责链模式跟方法队列一样都会其他方法顺序执行的效果,不同点是职责链模式可以设定方法的执行顺序装饰模式装饰模式组装完成后,运行的是最外面的类,被装饰的类也会运行......
  • python 基础习题2--字符串切片技术
    1. 有如下字符串str='123456789'字符串切片技术,例如,返回输出从第三个开始到第六个的字符(不包含)即得到:345利用字符串切片技术,代码可以这么写:print(str[2:5])如果想返回如下八行结果,利用字符串切片技术,如何编写代码?12345678912345678134534567892412345678912345678......
  • python 基础习题1--基础语法
    1.书写代码,输出结果为: 答案:print("Hello,Python!")ViewCode 2. ......
  • 设计模式
    设计模式前言设计模式是一种通用的思维方式,可以在各个行业和领域中应用,帮助设计师和工程师解决复杂的设计和工程问题,提高系统的质量和效率。在软件开发过程中,我们要减少重复代码,对修改关闭,对扩展开放,但是切勿提前过度设计。设计模式不是银弹,过度使用设计模式反而会使代码变得复......
  • keycloak~jwks-rsa中使用的设计模式
    com.auth0.jwk组织下面的jwks-rsa包,主要实现的是通过公钥对jwt的签名进行验证,在这个包中,它使用了包装器的设计模式,对默认的jwks提供者添加了一缓存的支持,通过建立一个GuavaCachedJwkProvider类,传入一个默认的UrlJwkProvider来将这个Provider进行包装,让它具有缓存的能力!包装器模式......
  • 顺序表和链表的练习题
    顺序表题目一:题目分析:该题目需要先对顺序表进行遍历至元素x正确插入位置,再对顺序表完成插入操作。因此涉及到for循环与if语句的使用代码实现/********************************************************************** name : SequenceList_insert* function:实现插......
  • 34.c语言数组练习题(牛客网)
    先打个广告哈哈哈牛客网练编程题不错不错哦冒泡排序必须必须必须会#include<stdio.h>voidsort(intarr[],intn){//外层循环for(inti=0;i<n-1;++i){intflag=1;//假设flag=1就是已经排序好的//内层循环for(intj=0;......
  • rhce练习题容易错的地方
    rhce练习题里容易错的地方使用导航器的时候,ssh连接因为导航器是一个工具,生成一个容器,在容器里面运行playbook安装软件包的时候,多个软件包使用循环looploop的格式-hosts:NODE1tasks:-name:installphpansible.builtin.yum:name:"{{ite......
  • Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
    Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算1.定义请求和返回对象的上下文对象packagecom.example.core.mydemo.java.filter;importjava.time.LocalDateTime;publicclassOrderReqContext{/***租客会员号*/StringmemNo;......
  • 工程中实践的微服务设计模式
    最近在读《微服务架构设计模式》,开始的时候我非常的好奇,因为在我印象中,设计模式是常说的那23种设计模式,而微服务的设计模式又是什么呢?这个问题也留给大家,在文末我会附上我对这个问题的理解。本次文章的内容主要是工作中对微服务设计模式的应用,希望能对大家有所启发。事务发件箱......