java小项目设计模式

在Java项目设计中,有多种设计模式可以使用,这些模式可以帮助你更好地组织代码,提高代码的可读性、可维护性和可扩展性。以下是一些常见的Java设计模式:

1. 单例模式:确保一个类只有一个实例,并提供一个全局访问点。这对于创建全局配置、数据库连接等有重要作用。

2. 工厂模式:提供一个创建对象的工厂,而不是让客户端代码直接创建。这在需要根据条件创建不同类型对象时很有用。

3. 观察者模式:当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。常用于事件驱动的系统。

4. 策略模式:定义一系列的算法,将每个算法封装起来,并使它们可以相互替换。这使得算法的变化独立于使用算法的客户。

5. 适配器模式:将一个类的接口转换为客户端所期望的另一个接口。使原本不兼容的类可以一起工作。

6. 装饰器模式:动态地给一个对象添加一些额外的职责。例如,给一个对象添加颜色、大小等属性。

7. Builder模式:提供一个对象的构建过程,而不是直接创建对象。这在构建复杂对象时很有用,特别是当构建过程需要分步骤进行时。

8. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得代码更加灵活。

9. 抽象工厂模式:提供一个接口,让子类决定如何创建其他对象。适用于创建产品家族的工厂。

10. 命令模式:封装了一个请求,使其能像一个命令对象那样被传递,从而使你能将请求封装起来,支持可撤销操作。

每个项目的具体需求可能会有所不同,选择合适的模式能够提高软件的灵活性和可维护性。在设计时,要根据实际问题来决定使用哪种模式,而不是盲目地应用。

只适合结构固定的程序设计,当程序由增加删除组件的操作时,visitor设计模式是不适合的。所以Visitor会被使用在编译器和语法分析中。

责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

java小项目设计模式

各部门内部之间的关系也很复杂时第三届互联网大学生创新创业大赛金奖,想添加一个新的部门进来,又要和其他部门打交道。这是我们可以抽出一个部分,让它和其他的部门打交道。这种模式叫调停者。

提供一个方法,可以顺序访问一个对象内部的各个元素,不需要知道内部构造。现在基本很少自己实现迭代器了,基本成熟的框架或者强大的JDK都会给出访问的方法。

将请求以命令的形式包裹在对象中,并传递给对象,调用对象寻找到处理该命令的合适的对象,并将该命令传递给相应的对象,该对象执行。

原型模式用的比较少,用于创建重复对象。需要实现Cloneable 可以选择重写clone()方法。clone分为浅克隆和深克隆。

第二,很多中间件设计理念也是基于设计模式的,还有其他的语言,都有自己的设计优秀实践。对于我来说,设计模式始于java,不止于java。

设计模式是很多程序员总结出来的优秀实践。曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过。现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认的优秀实践代码,毕竟看的比较清爽。

呜呼,废了好长的时间,终于把这些设计模式有回顾了一遍,感觉对他们其中的某些有了更深刻的理解吧。就把这篇文章当作自己的一个小字典吧,将来需要什么看什么,点看看一看,顺便可以继续丰富下内容。有些东西就该自己去记录一下,毕竟好记性不如烂笔头嘛。又快十一点了,睡觉…

构建一种翻译方式,将某种语言或描述翻译成我们很好理解的语言或者描述。这里很好理解的意思是看得懂,看的快。本来我也想举什么编译器这种高大上的,将底层语言甚至机械语言和我们使用的高级编程语言。后来想了想,其实Map就可以看作一个很好的编译器,key你可以存放一个非常小的字符串,value理论上你可以存放任何东西,所以代码就不写了。

当对特定角色进行访问的时候,需要通过访问者进行访问。一个对象不太方便被你直接访问的时候,你需要将自己的引用交给访问者,通过访问者去访问该对象。比如说,化学课,想看一个细胞结构,由于肉眼无法直接看到微观世界的玩意,需要通过显微镜间接访问。

System.out.println(“Second saved State: ” + originator.getState());

System.out.println(“First saved State: ” + originator.getState());

System.out.println(“Current State: ” + originator.getState());

private List mementoList = new ArrayList();

相当于做一个快照,在不破坏对象本身结构的情况下,记录对象的一个状态,合适的时候可以恢复到这种状态。数据库做事务回滚的时候就用了这种方式。这里需要注意的是,对象不与备忘录本身耦合,而是跟备忘录管理类耦合(就是List),这个好理解,毕竟快照不止一个嘛。

命令模式是将请求以命令的形式包裹在对象中,并传递给对象,调用对象寻找到处理该命令的合适的对象,并将该命令传递给相应的对象,该对象执行。简单点说就是不同请求都封装成一个对象,不同的请求调用不同的执行者。

提供一个方法,可以顺序访问一个对象内部的各个元素,不需要知道内部构造。现在基本很少自己实现迭代器了,基本成熟的框架或者强大的JDK都会给出访问的方法,比如说java中iterator。这样做主要是进一步封装对象内部的结构,让行为和结构想耦合。这个不举例子了,用过iterator这个的小伙伴应该都清楚,就是不停的next,去访问下一个元素。

一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。SpringBoot为用户封装了很多继承代码,都用到了模板方式,例如那一堆XXXtemplate。

if (this.getHandlerLevel().equals(request.getRequestLevel())){

System.out.println(“10 + 5 = ” + context.executestrategy(10, 5));

定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换。可以说是一组算法的封装,根据客户端给出的不同要求,进行不同的运算。比如下面这个简易计算器。

private static HashMap pool= new HashMap();

享元模式尽可能的让用户复用已经有的对象,从而避免造成反复创建对象的资源浪费。首先就会想到数据库连接池还有String常量池,延伸一下,几乎所有和缓存有关的代码,多少都会用到享元模式。享元模式要求大部分的对象可以外部化。这边要说两个概念,享元模式对象的属性可以分为两个部分,内部状态和外部状态,内部状态是指不会随环境而改变的值,比如说个人信息,外部状态是指随环境改变的值,不能进行共享的信息,如某大学生选修的课程。

组合模式是将存在某种包含关系的数据组织在一起,典型的例子就是树状结构。例如菜单功能,一个菜单除了自己该有的属性,还可能包含子菜单,创建的时候可以使用递归的方法。

又称门面模式,就是一个门面,一个操作无需让对象知道其内部实现的复杂度,尽量让用户感知到是非常简单的。这就是为什么我们controller层尽量(或者说一定)少些业务逻辑,让controller层只是起到一个传参和通用性参数校验的功能,剩下的全交给service去做吧。我们还需要在代码中不断将“长得”特别长的代码封装成一个方法,“让处处都有好看的外观”。看一下我们曾写过的代码,这里只起到了传参的作用,究竟这个足球是怎么创建出来的,客户端不必担心。

一个装饰类,在原来类的基础上增加一点功能。是不是和代理模式很像,我甚至可以将整个代码搬过来照样可以说的通的。这两个模式意思上有点差别,代理模式是原对象做不了那件事,必须让代理对象去做,主导侧重于代理对象,比如说买车。装饰模式是说,就是让原对象直接去做这件事,只是功能上增强一点,主导在于原对象。比如说炒菜的时候撒点盐。

就是用于抽象化和实现化的解耦。又是解耦,貌似设计模式就是教我们如何优雅的解耦。提高了代码的拓展性,并且可以实现代码的动态切换。 最开始的Ball、Soccer、BasketBall接着用,增加新的类

适配器,顾名思义,是让两个不兼容的东西可以一起工作。例如插座的电源是220V,手机直接给他220V 50HZ的交流电我相信一般都会直接炸了(除了诺基亚…)手机充电器就进行了适配,将电压变小,交流电变成直流电。除了这种需要改变属性的操作(比较好说,不举例子了),适配器还用于在接口继承方面。假设一个顶级接口有一大堆方法需要实现类实现,我新写了个类只是想选择的实现一两个接口,那其他的方法我是不是都需要实现一下,即使是空实现(单纯实现,不进行任何逻辑操作),这是我们就需要一个适配器类,空实现那些方法,我的新类只需要继承这个适配器类就好了,要是想实现某个方法,只需要重写掉配置类中对应的方法就好。这种模式基本都会用到,毕竟谁的代码还没个顶级接口啊。

Spring的AOP用的是动态代理,何为动态不看了,用过Spring的小伙伴都知道吧。单纯看一下最基础代理模式是什么样的。代理就是,一个对象辅助另一个对象去做某件事,同时还可以增加一点辅助功能。例如,你买车,的确是你花钱把车买到了,但是你不可能直接去和厂家谈吧,你应该通过4S店购买,同时4S店帮助你入保险扣税等操作,最终你才得到了你想要的车。

public static void main(String[] args) throws CloneNotSupportedException {

原型模式用的比较少,用于创建重复对象。需要实现Cloneable 可以选择重写clone()方法。clone分为浅克隆和深克隆。浅克隆只是克隆引用,对象还是一个。深克隆是对象也新创建了一个,如下:

SpringBoot实现了0配置,几乎所有的配置都写到了java代码中,大量的配置不得不让配置类采用建造者模式,这样层次比较清晰。

将一个复杂对象分布创建。如果一个超大的类的属性特别多,我们可以把属性分门别类,不同属性组成一个稍微小一点的类,再把好几个稍微小点的类窜起来。比方说一个电脑,可以分成不同的稍微小点的部分CPU、主板、显示器。CPU、主板、显示器分别有更多的组件,不再细分。

单例模式有很多种形式,最佳实践应该是两重判断,保证只new出来一个。单例可以说是非常普遍的设计模式了。单例就是指在服务容器的生命周期中只能有这么一个。比如说Servlet、Spring中注入的Bean等等都是单例的。

抽象工厂模式主要设计产品组的概念,就是某一个工厂生产出配套的一系列产品。例如,在生产足球的同时,SoccerFactory还可以生产与之配套的足球杂志。

这个其实和简单工厂模式差不太多,就是将工厂继续拆分,比如说刚刚EasyBallFactory是一个总工厂,我们现在拆分成SoccerFactory和BasketBallFactory分别生产足球和篮球。某个工厂内部可以根据需求生产不同的产品,比如说soccer可以生产不同大小的出来。

System.out.println(basketBall.create()); //give you a basketBall

设计模式是很多程序员总结出来的最佳实践。曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过。现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认的最佳实践代码,毕竟看的比较清爽。为什么再看一遍设计模式,主要有几个原因:第一,很多优秀的源码基本都使用了设计模式,明确设计模式能够更好的看源码。第二,很多中间件设计理念也是基于设计模式的,还有其他的语言,都有自己的设计最佳实践。对于我来说,设计模式始于java,不止于java。第三,有了这种规范,可以更好的和他人沟通,言简意赅。

访问者模式是一种将数据操作和数据结构分离的设计模式,它通常使用在对象结构比较稳定,但是经常需要在此对象结构上定义新的操作,或者需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作”污染”这些对象的类,使用访问者模式将这些封装到类中。

责任链模式,避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

从策略模式的定义可以看到它主要是将算法和客户独立开,一个典型的例子是排序算法,我们给定一个数组,输出排序后的结果,但是过程中我们可以采取不同的排序算法,这些算法其实就是策略。

状态模式主要解决对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。典型的例子是一个人在不同的状态下完成一件事的结果可能是不同的。

解释器的典型例子是在编译原理中的应用,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

中介者模式的典型例子就是未加入 WTO 之前各个国家相互贸易,结构复杂,大家都加入WTO后是各个国家通过 WTO 来互相贸易,变得规范。

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散无本会员温饱小项目教程,而且可以独立地改变它们之间的交互。

观察者模式可以结合Android中的ListView来理解,ListView关联的适配器Adapter在数据发生变化时会通过notifyDataSetChanged()方法来通知界面刷新。

在Java集合框架中我们知道对于一个指定的集合类,我们可以使用一个特定的Iterator迭代器来对集合中的所有元素进行遍历。这样结合来看,迭代器模式很好理解了。

命令模式主要是通过调用者调用接受者执行命令,这个模式中需要理解的是三个角色:(1) Receiver 真正的命令执行对象 (2) Command 持有一个对Receiver的引用,调用Receiver的相关方法。(3) Invoker 请求者,持有一个对Command的引用,调用Command的方法执行具体命令。

模板方法模式一个典型例子就是Android中的异步任务类AsyncTask,它对异步任务的执行进行了流程封装,子类继承它时,只需在指定的流程中实现具体的操作即可。

代理模式主要解决在直接访问对象时带来的问题。举个例子,猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。

在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

专题:
农村村创业  
农村剧创业  
农村创业课  

© 版权声明
THE END
喜欢就支持一下吧
点赞56 分享