首页 文章 精选 留言 我的

精选列表

搜索[Java库],共10000篇文章
优秀的个人博客,低调大师

java策略模式

如果都使用if-else的话,就会使用代码变的臃肿,而且难以复用。那我们就可以根据不同的情况,将不同的方式封装成不同的策略,将策略与它的使用对象分离开来。 案例: 定义注解,标注范围 /** * @author Gjing * 价格范围注解 **/ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface PriceRegion { int min() default 0; int max() default Integer.MAX_VALUE; } 具体策略 /** * @author Gjing * 抽象策略 **/ public interface Price { BigDecimal getPri

优秀的个人博客,低调大师

java代理模式

前言: 看有关于技术的文章需要带着问题去看,我上周在公司做了一场设计模式的技术分享,在会上又不同的小伙伴提出了很多疑问,那么今天我就来解决一下这一些疑问,非常感谢参与会议的小伙伴。 问题: 一、什么是设计模式? 二、为什么JDK动态代理与CGLIB动态代理生成的源代码是差不多的? 三、代理模式相比直接使用接口有什么好处吗? 四、如果接口被多个类实现会怎样? 问题1:什么是设计模式 设计模式是一种经验能够使新手更加简单的使用前人的经验和方案。 可以避免重复劳动,就像一句在这个行业流行的话不要重复造轮子。 设计模式是针对特定上下文的特定问题的解决方案,解决方案被抽象化、模版化、就是设计模式,学习设计模式的关键是理解,理解方法理解思想理解观念。 不是为了使用设计模式而,设计的根本是为了可复用、可拓展、高性能,不要为了使用设计模式而使用,一定要结合实际环境的去考虑整个问题。 每一种模式有四个基本元素:模式名称、问题描述、应用场景、应用后效果。 设计模式在应用中遵循六大原则: 开闭原则:对扩展开放,对修改关闭。 里氏代换原则:任何基类可以出现的地方,子类一定可以出现。 依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体。 接口隔离原则:使用多个隔离的接口,比使用单个接口要好。 迪米特法则:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。 合成复用原则:原则是尽量使用合成/聚合的方式,而不是使用继承。 代理模式分为两种:静态代理、动态代理,这两者有什么区别呢?往下看就明白了。 什么是代理模式:为其他对象提供一种代理以控制对这个对象的访问(例:AOP、拦截器)。 代理模式的角色:被代理者与代理者实现的接口、代理类、被代理类。 一、静态代理模式: 静态代理由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class就已经存在了。 UML图: 图中含有接口(person)、代理类(proxy)、被代理类(target),带代理者与代理者都实现了person的接口,client在调用时是直接访问的被代理类(proxy),代理类在buy方法中引用了targer类中的buy方法,可以在代理前、代理后做一些其他的业务逻辑处理,控制targer的访问。 下面直接上代码,一步步引出静态代理的优点与缺点: 接口: package proxyblogs; /** * 人的行为接口. */ public interface person { /** * 买东西. * * @param name 商品名称. * @return int * @author null */ int buy(String name); Target类(被代理者): package proxyblogs; /** * @ClassName Target. * Create by Null on 2019/2/26/19:29 **/ public class Target implements person { /** * 买东西. * * @param name 商品名称. * @return int 价格 * @author null */ @Override public int buy(String name) { if (name.equals("apple")) { return 5; } else { return 3; } } } proxy类(代理者): package proxyblogs; /** * @ClassName proxy. * Create by Null on 2019/2/26/19:30 **/ public class proxy implements person { /** * 买东西. * * @param name 商品名称. * @return int * @author null */ @Override public int buy(String name) { int buy = new Target().buy(name); //运费 int freight = 2; return buy + freight; } } test测试类 package proxyblogs; /** * @ClassName Test. * Create by Null on 2019/2/26/19:39 **/ public class Test { public static void main(String[] args) { int money = new proxy().buy("apple"); System.out.println(money); } } 执行结果: 7 Process finished with exit code 0 优点: 一、相对于动态代理来说,程序比较简易、性能比动态代理要高。 缺点: 一、静态代理类和被代理类实现了相同的接口,代理类通过被代理类实现了相同的方法。这样就出现了大量的代码重复,增加了代码维护的复杂度。 二、静态代理只服务于一种类型的对象, 如果要服务 多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模 稍大时就无法胜任了。

优秀的个人博客,低调大师

Java总结 - PriorityQueue

新年第一篇, 如果有错误请及时指正哈!! 祝大家新年快乐 嘻嘻 今天说一下PriorityQueue,这是一个有顺序的队列,此顺序并不是加入顺序,而是元素的按一定规则排列的顺序,我们看一下他的类图关系 相对于Deque,此实现就只是实现了关于Queue的相关接口,所以它就只能作为队列使用了.我们来稍微看一下用法Comparator<Integer> comparator = Comparator.comparingInt(x -> x); PriorityQueue<Integer> queue = new PriorityQueue<>(comparator); queue.add(7); queue.add(1); queue.add(10); queue.add(6); System.

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册