mac模式怎样构造在jsp中_对java设计模式的理解、总结

1、在java中,什么时候用重载,什么使用用重写?

重载(Overloading)和重写(Overriding)都可以对业务功能的增强。

重载: 在同一个类中,方法名一样,但是参数不一样(即参数的数量或参数类型不能完全相同)

重写: 在父子类中,子类重写了父类中的方法。需要具有相同的方法名、参数、返回值。

重载 就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

重载中返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

重写 中访问修饰符的限制一定要大于被重写方法的访问修饰(public>protected>default>private)

被final修饰和private修饰的方法不能被重写

代码中应用: 重载:之前写的登录,在系统内是loginname和password两个参数才能登录,但是因为业务需要跟第三方对接接口的时候,可以从他们系统直接登录到我们系统,但是没有loginname和password,只有根据双方系统中都有的一个字段身份证来认证,我处理方法:根据第三方传来的身份证号生成token并且返回,他们带着token再次来请求。所以我要写一个login()的重载方法。跟之前的参数不一致,只需一个参数token就可以。 重写: 平时和同事写一个类似的功能,所需参数一样,返回值也一样。就仅仅是业务处理可能不一样,我们就会在父类中写声明一个方法,然后我俩同时重写这个方法,然后各自写自己的业务就行。

2、举例一个你更倾向于抽象类,而不是接口的代码设计场景

抽象类和接口都是对事物的一种抽象, 接口是对动作的一种抽象,而实现类是对根源的抽象。

接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

抽象方法要被实现,所以不能是静态的,也不能是私有的。

接口可继承接口,并可多继承接口,但类只能单根继承。

当业务中,有一些功能是一致的,大多时候都不会被重写的,这时候可以使用抽象类定义一个具体的实现方法,这样就不用子类一一实现了。例如在spring中的JDBCtemplate中就使用了抽象类作为模板设计模式基础。

3、在java中,为什么不允许静态方法中访问非静态变量?

静态方法只能调用静态方法或者变量,非静态方法只能调用非静态方法或者变量。

一个类的静态变量和静态方法是属于这个类本身的,在类被加载的时候就会分配内存(方法区),可以直接通过类名点的方式来调用, 而非静态方法和变量是属于对象的,也只有在外部使用这个类的对象时,比如 new 这个对象时, 非静态变量和方法才会被加载到堆内存中。

所以说,静态变量和方法是优先加载的,而且只加载一次,非静态变量和方法是外部使用的时候才被加载。 所以当静态变量和方法加载后, 非静态变量和方法可能没有被加载,所以不能访问。

在开发中我们会使用很多工具类,在写工具类的时候我们一般都使用的是静态方法,因为不用每次调用的时候都要去new 出来,不用频繁的读写内存, 而是从内存中直接取出来。

4、列举你说了解的软件分层场景,软件分层有哪些好处?

举例: 就像我们在开发中会将代码分为3层,

表现层(controller) 与前端交互数据。

业务层(service) 处理业务

持久层(dao) 与数据库交互,一般写sql

这样分层可以使编写代码的时候各行其志,我们在各自的分层中写对应的代码。

经典的MVC架构:

模型(model)、视图(view)、控制器(controller)。

模型: 关注数据的处理,主要负责业务代码和数据操作。

视图: 页面。 显示数据用的,例如 html 、jsp等。

控制器: 用于 视图和模型 之间的协调

好处: 1、让代码看起来更加清晰。可维护性高。

2、模型和视图之间的耦合性低。

5、请列举符合开闭原则的设计模式。

先说一下开闭原则: 一个软件实体应当对外扩展开放,对修改关闭。 即软件实体应尽量在不修改原有的代码情况下进行扩展。

1、适配器模式: 在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。适配器类继承了目标抽象类,而适配器又有适配者的引用。

2、装饰者设计模式: 装饰者设计模式的本意就是不改变一个对象本身功能的基础上给对象增加额外的新行为。 装饰模式是一种用于替代继承的技术,在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能

3、工厂方法模式:工厂方法模式引用了 抽象工厂角色。 这样在我们添加具体的产品工厂的时候,只需要继承或实现抽象工厂就行,不用修改原有代码。

4、观察者模式: 定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅。 当我们需要增加一个具体的观察者时候,不需要修改原有的代码, 而是只需要继承之前定义的观察者接口即可。

5、代理模式: 代理模式分为JDK动态代理和cgLib动态代理, 代理模式是给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。我们要增强某个方法的时候,只需要在代理类都完成就行,不用在原有代码上做修改。

6、策略模式: 实现某一个功能有多条途径,每一条途径对应一种算法,此时我们可以使用策略模式来实现灵活地选择解决途径。 我们在使用策略模式的时候可以在不修改代码的情况下 增加新的策略方式。

7、模板方法模式: 模板方法模式是一种基于继承的代码复用技术。 在父类中提供了一个定义算法框架的模板方法,还提供了一系列抽象方法、具体方法和钩子方法。 我们可以通过添加不同的子类,来完善我们的需求。但是这样有个不好的地方,就是会导致我们的子类越来越多。

6.总结设计模式中创建型、结构型、行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值