首页 文章 精选 留言 我的

精选列表

搜索[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.

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

Java总结 - ArrayDeque

这次来说一下ArrayDeque,我们先看一下他的类关系图,其中忽略掉了一些标记性接口 我们看一下类的定义public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable {...} 从中我们可以看到他实现了Deque接口,那么Deque是实现了Queue<E>接口,如下是两个接口中的部分方法Queue: boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); Deq

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

java json解析

关于json串的解析,有很多种方法,目前测出最方便最快的一个第三方jar包就是jackson。 1、需引用的jar有二:jackson-core-asl、jackson-mapper-asl。 2、使用:ObjectMapper mapper = new ObjectMapper(); json转bean: mapper. readValue(json, mybean.class); json转bean list:mapper.readValue(json, TypeFactory.collectionType(ArrayList.class,mybean.class)); bean转json: StringWriter sw = new StringWriter(); JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); mapper.writeValue(gen, obj); sw.toString() 3、json串中有key为A,但指定转换的mybean中未定义属性A,会抛异常。处理:mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false),加上这一条,就没问题了,正常转换。 4、默认的json串,如果key或value类型非字符串,需要加上双引号的,但有些json包转换出来的json串却不一定会带上双引号。使用jackson时,如果非字符串未加双引号,也会报错。处理:mapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

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

用户登录
用户注册