豆豆语录网提供说说你知道的java设计模式精选内容!是不是最近刚好要想要了解或者阅读一些说说你知道的java设计模式的相关说说呢?在说说你知道的java设计模式这个说说专题里面,可能会有你需要的相关qq空间说说!
说说你知道的java设计模式
qq说说你知道的java设计模式
一般会让你写单例模式,更多面试题见javamm网
今天来说说程序员小猿和设计模式需求的事,最近看到一些设计上的常识,可能会对其它的新人也有些帮助。
一、代理模式
为其它对象提供一个代理对象,并由代理对象控制这个对象的访问。
特点:
1,很直接的,实现同一个接口或者继承同一个抽象类。
2,代理对象控制对被代理对象的访问。
无论是哪一种方式,代理模式的实现都是必须经过代理才能访问被代理模式。就比如明星拍电影,不会跳过经纪人直接找到明星,而是经过经纪人再到明星,要不然经纪人这个职位岂不是浪费了。
二、责任链模式
创建多个对象,使这些对象形成一条链,并沿着这条链传递请求,直到链上的某一个对象决定处理此请求。
特点:
1,接收请求的对象连接成一条链,对象之间存在层级关系。
2,这些对象可处理请求,也可传递请求,直到有对象处理该请求。
抽象处理者角色:定义了处理请求的接口或者抽象类,提供了处理请求的的方法和设置下一个处理者的方法。
具体处理者角色:实现或者继承抽象这角色,具体逻辑根据实际的架构来定。
责任链模式的优缺点:
优点:
1,降低耦合度:客户端不需要知道请求由哪个处理者处理,而处理者也不需要知道处理者之间的传递关系,由系统灵活的组织和分配。
2,良好的扩展性:增加处理者的实现很简单,只需重写处理请求业务逻辑的方法。
缺点
1,请求会从链头发出,直到有处理者响应,在责任链比较长的时候会影响系统性能。
2,请求递归,调试排错比较麻烦。
总结:
责任链模式在实际项目中可以用到的地方还是比较多的,比如会员等级系统,会员等级之间构成一条链,用户发起一个请求,系统只要把请求分发到责任链模式的入口,直到传递到与用户会员匹配的等级,这样各个会员等级的业务逻辑就会变成很清晰。
三,单例模式
Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。
核心知识点如下:
(1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。
(2) 在其内部产生该类的实例化对象,并将其封装成private static类型。
(3) 定义一个静态方法返回该类的实例。
饱汉模式:优点是:写起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存;缺点是:并发环境下很可能出现多个SingletonTest实例。
饿汉模式:优点是:写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题;缺点是:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。
简单优化:
优点是:使用synchronized关键字避免多线程访问时,出现多个SingletonTest实例。缺点是:同步方法频繁调用时,效率略低。
四,基本常识 Jia-qun-( 860-170-416 )-跟各位大神一起沟通交流学习!
1, 区分命令与查询,明确前置条件与后置条件这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void返回的方法是命令,查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调n次结果都是一样的,比如get某个属性值,或查询一条数据库记录,命令是指有副作用的,也就是会修改状态,比如set某个值,或update某条数据库记录,如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:User deleteUser(id),删除用户并返回被删除的用户,考虑改为getUser()和void的deleteUser()。
2, 可配置一定可编程,并保持友好的CoC约定因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到classpath直扫某个指定名称的配置,或者启动时允许指定配置路径,做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦,另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在templates目录下就不用配了,如果你想换个目录,就配置下。
3.,不要控制外部对象的生命周期比如上面说的Action使用接口和Renderer扩展接口,框架如果让使用者或扩展者把Action或Renderer实现类的类名或类元信息报上来,然后在内部通过反射newInstance()创建一个实例,这样框架就控制了Action或Renderer实现类的生命周期,Action或Renderer的生老病死,框架都自己做了,外部扩展或集成都无能为力,好的办法是让使用者或扩展者把Action或Renderer实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。
4, 扩展接口职责尽可能单一,具有可组合性比如,远程调用框架它的协议是可以替换的,如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等,如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略,当然这个分解的粒度需要把握好。5, 微核插件式,平等对待第三方大凡发展的比较好的框架,都遵守微核的理念,Eclipse的微核是OSGi, Spring的微核是BeanFactory,Maven的微核是Plexus,通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换,如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到,原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。
如果笔试zd问到的话,一般会叫你写单例,如果是面谈的时候问到的话,就不太好说单例了,因为太浅了,可以稍微提下,最好重点放在别的模式专上,去补个三四个常见的模式,比如观察者,策略者,工厂,门面,代理等等,了解他们的概念及应用场景就可以了。集中了解三四个模式并不需要花多少时间,面试的时候足够应付了属。
java如果要谈设计模式,一般具有一定规模的公司可能都会结合时下用的比较广泛的开源框架来将,例如谈谈自己对spring中设计模式的见解。
单独讲设计模式没多大意义。
本回答被网友采纳