设计模式

Guice依赖注入(Scope)

半城伤御伤魂 提交于 2020-12-25 17:15:37
本教程主要详细讲解Guice依赖注入中的一些高级选项,他们分别是 Scope , Eagerly Loading Bindings , Stage , Optional Injection 。我们将一一对他们进行讲解。 基础环境 技术 版本 Java 1.8+ Guice 4.2.3 初始化项目 初始化项目 mvn archetype:generate -DgroupId=com.edurt.sli.guice -DartifactId=guice-binder-scope -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -DinteractiveMode= false 修改pom.xml增加Guice依赖 <?xml version="1.0" encoding="UTF-8"?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >

你值得拥有!更省钱地完成数据监听

ε祈祈猫儿з 提交于 2020-12-25 13:52:10
作者 | 梁唐 来源 | TechFlow(ID:techflow2019) 大家好,今天一起来了解一个新的设计模式——观察者模式。 观察者模式的思路很简单,它被广泛地应用在各种 数据监控 上。 很多时候我们希望监听某个数据的变化,希望一旦获悉它的变化之后便能立即采取一些举措。按照常规的操作,我们需要开启额外的线程来进行监听。但开启线程并不是最好的选择,一是因为非常麻烦,二是会带来额外的开销。 我们今天介绍的观察者模式就可以在 无需多余开销 的基础上 完成数据监听这个功能。 观察者 在观察者模式当中,整个运行流和常规的操作相反。我们 并不是用一些程序去监听数据的变化,相反,是当数据发生变化的时候,我们去通知对应的监听器数据产生了变化 。好处我们前面也说过了,可以避免多余的开销。 首先,我们来实现两个监听器。当数据发生变化之后就会触发这两个监听器。在这个设计模式当中,监听器被命名为 viewer,这里的 观察不是一种主动的观察,而是一种被动地接收通知 。也许是起名的人想不出更好的名字来吧,其实我觉得应该叫做 receiver 更好。 class IncreaseViewer: def __init__(self): self.data = 0 def update(self, subject): # 判断是否增加 if subject.data > self.data: print(

初识 Vi 文本编辑器

六眼飞鱼酱① 提交于 2020-12-25 11:58:48
Vi 是典型的 Unix 文本编辑器。来了解一下它或它的各种化身:Vim、Neovim、gVim、nvi 或 Elvis,它适用于 Linux、macOS、Windows 或 BSD。 不管你用的是 Vim、Neovim、gVim、nvi,甚至是 Elvis,其实都是这个典型的 Unix 编辑器 Vi。可能每一个 Linux 和 BSD 发行版中都包含了 Vi,Vi 是一个轻量级的简约型文本编辑器,由于其简单简洁的键盘快捷键和双模式设计,很多用户都喜欢它。 最初的 Vi 编辑器是由 C shell 的创建者 Bill Joy 编写的应用程序。现代 Vi 的化身已经 增加了许多功能 ,包括多级撤销、插入模式下更好的导航、行折叠、语法高亮、插件支持等等。Vim 被认为是它的最流行的现代实现,大多数人在提到 Vi 时实际上是指 Vim。 所有这些化身都是为了同一个目标,所以本文将从通用的场景来探讨 Vi。你的计算机上的版本可能略有不同,但你仍然可以从 Vi 编辑文本的方式中获益。 安装 Vi 如果你运行的是 Linux、macOS 或 BSD,那么你已经安装了 vi 命令。如果你在 Windows 上,你可以 下载 Vim 和 gVim 。 在 NetBSD 上,nvi 是 Vi 的常见替代品,而 Slackware 则提供了 Elvis (和 Vim),流行的 Neovim

女巫面具护肤产品为什么能如何营销?女巫面具微商系统为你揭晓

邮差的信 提交于 2020-12-25 08:55:44
“逆龄逆光肌,自信自然美”。6月26日,香港时闰集团“逆光”新品发布会在西安曲江池畔凯悦酒店华丽落幕。此次发布会邀请了众多知名媒体、各大平台百万级美妆达人,和时闰集团高层、核心经销商一起,见证了新品的亮相。 女巫面具护肤产品微商系统开发咨询黄先生:dymsw1 一、女巫面具微商系统的时闰品牌意义 女巫面具为再造词,是see+green的结合。see不仅仅是看见,更是视觉,感受,也是内心的体验。green一般会被译作绿色,其实它还有充满活力、青春的意思。女巫面具:有青春永驻的寓意,也立意绿色植物萃取。中文译作“时闰”,“闰”是中国历法的用词,如闰月、闰年,“闰”给予一种时间重复和停留的美好错觉,时间的“闰”——时间一直在走,美丽从未改变! 女巫面具微商系统做的微商模式是有等级奖励制度和差价。 二、女巫面具微商系统的代理模式: 大董事-小董事-消费者-零售 董事以上身份享受业绩分红奖励。一个月内代理可累计进货额去升级。 代理商模式无非也是推荐的奖励机制和团队业绩的提成收益 新品可在100内申请退货退款 三、女巫面具微商系统之时闰营销机制创新: 说到商系统核心并没有太多创新的玩法。 可以加上创新的功能玩法,比如说团队业绩pk奖励,是会激励到更多 2020,seegreen品牌(香港时闰集团旗下品牌)将继续加速融合,发展新零售事业,加大研发投入,推出更多受到市场和消费者认可的产品。 来源:

梁老师小课堂|谈谈模板方法模式

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-25 05:54:49
众多设计模式中,我觉得模板方法模式是很好理解,也很值得深入研究的技巧。定义如下,在一个包含多个步骤的业务框架中,大部分步骤是固定不变,并且适用于多种业务场景,可变的步骤则留给子类独立实现,从而分离了稳定和变化。 使用这种模式稍不留心,就会出现一些奇奇怪怪的问题。第一个是多个抽象方法会修改相同的变量,方法间出现强关联,第二个问题是定义了过多的抽象方法。后者正是今天想和你聊的话题,跟着我的步伐往下看吧。 一、为什么会出现这种问题? 我认为是这样的,产品经理从业务角度告诉我们,这个功能涉及到哪些步骤,每个步骤需要完成哪些事,然后我们就照搬概念将其转换成代码,考虑到有些步骤会涉及到多个实现,于是留了很多扩展方法。 不久后,新的业务需要复用这些流程,需要步骤1\2\3,但是不需要步骤4\5,甚至看不懂步骤4\5是做什么的,也不知道什么条件下会被调用,原有设计就显得不够简单了。 怎么理解这里说的简单呢?简单是站在人的角度来看的。假如,定义者和实现者来自两个不同的团队,实现者阅读文档后还需要定义者解释,才知道怎样实现抽象方法是正确的,那它就是复杂的。这个是我的真实感受,之前我在做中台通用能力建设,通过扩展点对外赋能时,思考最多的就是如何让第三方快速理解并上手。 总结一下,生搬硬套需求文档,让执行顺序完整地反映在代码结构中,会导致模板方法模式出现了过多的抽象方法。 二、出现了怎么办?

还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

与世无争的帅哥 提交于 2020-12-25 03:27:53
点击蓝色“程序员书单”关注我哟 加个“星标”,每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢。经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年SpringBoot大热,干脆连配置都不需要了解了,直接一键式编译部署运行,让Java工程师的入门成本变得越来越低。 但于此同时,互联网公司对于Java的应用场景也在不断地升级换代,从单机部署再到分布式,从SOA再到微服务,Java后端技术栈变得更加庞大,对于工程师的要求也越来越高,特别是对于大公司来说更是如此,也正因为如此,对Java工程师的考察已经不限于Java Web的那套东西了,企业往往会提出更高的要求,比如熟悉Java并发编程和JVM调优,了解分布式技术、微服务以及中间件等等。 而今天的这份书单就会来推荐一些关于Java并发编程的好书,对于一个Java工程师来说,我们一开始接触的其实是Java中的多线程,所以这份书单也会由浅入深依次推荐相应的书籍,从多线程基础,再到并发编程实战,最后则会推荐几本关于并发编程原理的书籍,其中也包含了对于JUC并发包的源码解析。 Java并发编程书单 ​ Java多线程编程核心技术 Java多线程是每个Java工程师都必须要掌握的知识点

Java中高级核心知识全面解析——Redis(简介、基本数据结构、跳跃表【简介、实现】)上

丶灬走出姿态 提交于 2020-12-24 15:57:59
目录 一、5种基本数据结构 1.Redis简介 1)Redis 的优点 2)Redis 的安装 3) 测试本地 Redis 性能 2.Redis五种基本数据结构 1)字符串 string ①、SDS 与 C 字符串的区别 ②、对字符串的基本操作 ③、设置和获取键值对 ④、批量设置键值对 ⑤、过期和 SET 命令扩展 ⑥、计数 ⑦、返回原值的 GETSET 命令 2)列表list ①、链表的基本操作 ②、list 实现队列 ③、list 实现栈 3)字典 hash ①、渐进式 rehash ②、扩缩容的条件 ③、字典的基本操作 4)集合 set ①、集合 set 的基本使用 5)有序列表 zset ①、有序列表 zset 基础操作 二、跳跃表 1.跳跃表简介 1)为什么使用跳跃表 2)本质是解决查找问题 3)更进一步的跳跃表 2.跳跃表的实现 1)随机层数 2)创建跳跃表 3)插入节点实现 第一部分:声明需要存储的变量 第二部分:搜索当前节点插入位置 第三部分:生成插入节点 第四部分:重排前向指针 第五部分:重排后向指针并返回 4)节点删除实现 5)节点更新实现 6)元素排名的实现 一、5种基本数据结构 1.Redis简介 “ Redis is an open source (BSD licensed), in-memory data structure store, used as

初识 Vi 文本编辑器 | Linux 中国

倖福魔咒の 提交于 2020-12-24 08:41:50
Vi 是典型的 Unix 文本编辑器。来了解一下它或它的各种化身:Vim、Neovim、gVim、nvi 或 Elvis,它适用于 Linux、macOS、Windows 或 BSD。 来源: https:// linux.cn/article-12947- 1.html 作者:Seth Kenlon 译者:Xingyu.Wang (本文字数:2197,阅读时长大约:3 分钟) 不管你用的是 Vim、Neovim、gVim、nvi,甚至是 Elvis,其实都是这个典型的 Unix 编辑器 Vi。可能每一个 Linux 和 BSD 发行版中都包含了 Vi,Vi 是一个轻量级的简约型文本编辑器,由于其简单简洁的键盘快捷键和双模式设计,很多用户都喜欢它。 最初的 Vi 编辑器是由 C shell 的创建者 Bill Joy 编写的应用程序。现代 Vi 的化身已经 增加了许多功能 ,包括多级撤销、插入模式下更好的导航、行折叠、语法高亮、插件支持等等。Vim 被认为是它的最流行的现代实现,大多数人在提到 Vi 时实际上是指 Vim。 所有这些化身都是为了同一个目标,所以本文将从通用的场景来探讨 Vi。你的计算机上的版本可能略有不同,但你仍然可以从 Vi 编辑文本的方式中获益。 安装 Vi 如果你运行的是 Linux、macOS 或 BSD,那么你已经安装了 vi 命令。如果你在

JAVA设计模式详解

∥☆過路亽.° 提交于 2020-12-24 07:44:16
设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。 创建型模式: 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。 GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式: 用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式: 用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。 GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。 根据作用范围来分 根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。 类模式: 用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。 GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。 对象模式: 用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。 GoF 中除了以上 4 种,其他的都是对象模式。 GoF的23种设计模式的功能 前面说明了 GoF 的 23

Java中不可或缺的50个小技巧,好用!

拥有回忆 提交于 2020-12-24 01:01:27
《Effective JavaJava》名著,必读。如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提升编码素质。 以下内容只记录了我自己整理的东西,还是建议读原文。为了聚焦知识点,一些说明故意忽略掉了。相当于是一篇摘要。 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。 优势: 可读性高(方法名) 性能(不一定创建对象) 灵活性高 下面针对三个优势进行一些解读。 可读性高 new Point(x,y)和Point.at(x,y)、Point.origin()。构造函数只能看出两个参数,不知其意,后者更易理解。 性能 在某些情况下,可以事先进行实例化一些对象,调用时直接调用即可,不需要进行改变。比如,Boolean。 public final class Boolean implements Serializable, Comparable<Boolean> { // 预先设置两个对象 public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public Boolean(boolean var1) { this