合作开发之后谈设计模式

2023-11-10 00:30

本文主要是介绍合作开发之后谈设计模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         在机房收费系统个人版中只用了一个抽象工厂加反射的设计模式,合作开发中要求尽可能的多用设计模式所以在原来的基础上又加了职责链、策略、模板、单例、外观等设计模式。设计模式每用一次都有不同的收获。这次就谈谈职责链跟模板方法模式吧!

职责链设计模式

         当我们第一次接触一个新事物时,首先要知道的肯定是它的名字。比如认识一个人,知道了它的名字之后才进一步对其进行了解,然后再跟他的名字产生联系。再如第一次接触飞机时,肯定要知道的是它的名字—飞机,等接触飞机的时间一长就会明白他为什么被称为飞机,因为它是会飞的机器。那么职责链又为什么被称为职责链设计模式?

         职责

         职责链模式使多个对象都有机会处理请求 ,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链设计模式中职责是其组成的一部分。职责,也就是在它要处理的是请求,职责链中的每一个对象把处理的这种请求当做自己的职责。

         链

         职责链中处理请求对象的个数肯定大于1,它使多个对象都有机会处理请求。所以他要求多个对象连续处理一个请求,首先第一个对象接收到请求判断该请求是不是处于它的职责内,如果是则处理,如果不是则向第二个处理对象传递,同样第三个、第四个。

         如何抽象职责链

         职责链模式的使用前提,首先需要用户提交一个请求,而这个请求需要多次判断,也就是说对这个请求的回应有多种情况,当满足条件1时得到结果1,满足条件2时得到结果2以此类推条件3、4…..,这种情况类似于程序中if …elseif… elseif …elseif…的判断语句。如何抽象职责链中的对象?抽象对象还是应该根据需求来进行抽象,由于职责链中每一个对象都担负自己的职责,所以对于职责链中的对象应该按其“职责“来对其进行抽取。

         如何将处理同一请求的对象连成一条链

         对于职责链,分析其职责抽象出满足其要求的多个对象只是完成了职责链的第一步,要完成职责链还需要将抽象出来的多个对象连成一条链。其原理是设计模式的依赖倒转原则,依赖于抽象而不是依赖于具体。首先定义一个处理请示的接口,接口中含有一个对象是对自身的引用(依赖于抽象)。然后是具体处理者类,处理它所负责的请求,可访问它的后继者(依赖倒转原则)。

         类图

        

         职责链模式的好处

         当客户提交一个请求时,请求是沿链传递直至有一个对象负责处理它。这使得接收者和发送者都没有对方的明确信息,且链中的对象自己也不知道链的结构。结果是职责链可简化对象的互相连接,它们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接收者的引用。也就是说可以随时随地的增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。

模板方法模式

         定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

         什么是模板模式

         模板方法模式,顾名思义就是实现某一类东西时提供一个不变的模板,整个模板作为一个框架,具体事务的实现都在这个框架中制作,而具体的实现可以不相同。例如制作桌子时可以做一个桌子模板,而这个模板就是有四个腿,一个桌面。拿四个腿和一个桌面作为制作桌子的模板,具体的制作如四个腿可以长、可以短可以是木质的也可以是其他材料的。这样做出来的桌子都具有一个桌面和四个腿,皆出自与一个模板。

         为什么叫模板方法模式?

         模板方法模式不仅仅是为了创建一个模板(框架),模板方法模式还要实现的是复用。就拿制作一批桌子来说,客户给出桌子模型桌子腿长,桌面尺寸都有一定的要求,而唯一不同的就是桌子的颜色。这时就可以用模板来实现那些没必要重复的操作如尺寸的把握,用模板制作出者批桌子后只需要在原来的基础上刷不同的漆即可。

         模板方法模式是怎么实现的?    

         模板方法模式的实现主要用到的是面向对象继承、多态、封装三大特性中的继承跟多态。由于子类作为父类模板的具体实现继承了父类的算法的骨架和某些个别步骤的实现,所以当更详细的层次上的实现可能不同时,只需要在子类中重定义某些特定的步骤(方法重写),实现子类在父类的基础上多态的特性。


实例

/*** 桌子抽象模板类* @author dell**/
public abstract class AbstractDesk {/** 桌子腿制作要求*/
protected  void Legs()
{System.out.print("四条长1米");
}
/** 桌子面制作要求*/
public abstract void Table();
/** 桌子制作模板*/
public void MakeTable(){Legs();Table();System.out.print("的桌子");}
}

/** 具体黑色桌子*/
public class BlackDesk extends AbstractDesk {@Overrideprotected void Legs() {// TODO Auto-generated method stubsuper.Legs();System.out.print("都是黑,");}@Overridepublic void Table() {// TODO Auto-generated method stubSystem.out.print("桌面为黑色");}}


/** 具体红色桌子*/
public class RedDesk extends AbstractDesk {@Overrideprotected void Legs() {// TODO Auto-generated method stubsuper.Legs();System.out.print("都是红色,");}@Overridepublic void Table() {// TODO Auto-generated method stubSystem.out.print("桌面为红色");}}


/** 测试类*/
public class Test {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubRedDesk reddesk=new RedDesk();reddesk.MakeTable();BlackDesk blackdesk=new BlackDesk();blackdesk.MakeTable();}}

         模板方法的使用场合和好处

         模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势的。也就提供了一个很好的代码复用平台。如果以后遇到这种情况:有一个过程需要执行,这个过程包括一系列步骤,整个过程从高层次看是一样的,但是每个步骤的具体细节不一样,这时我们就可以考虑这种模板方法模式了。即当不变的行为和可变的行为在类中混在一起的时候,不变的行为就会在子类中重复出现,这是通过模板方法模式把这些行为搬移到单一的地方实现(超类),而把不同的部分在子类实现,这就使子类摆脱了重复的不变行为的困扰。


这篇关于合作开发之后谈设计模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379341

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二、单例模式的介绍 说到单例模式,大家第一

漫谈设计模式 [12]:模板方法模式

引导性开场 菜鸟:老大,我最近在做一个项目,遇到了点麻烦。我们有很多相似的操作流程,但每个流程的细节又有些不同。我写了很多重复的代码,感觉很乱。你有啥好办法吗? 老鸟:嗯,听起来你遇到了典型的代码复用和维护问题。你有没有听说过“模板方法模式”? 菜鸟:模板方法模式?没听过。这是什么? 老鸟:简单来说,模板方法模式让你在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。这样,你可

漫谈设计模式 [9]:外观模式

引导性开场 菜鸟:老鸟,我最近在做一个项目,感觉代码越来越复杂,我都快看不懂了。尤其是有好几个子系统,它们之间的调用关系让我头疼。 老鸟:复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你的代码结构? 菜鸟:设计模式?我听说过一些,但不太了解。你觉得我应该用哪个模式呢? 老鸟:听起来你的问题可能适合用**外观模式(Facade Pattern)**来解决。我们可以一起探讨一下。