提交 366da669 编写于 作者: W wizardforcel

2020-06-14 16:18:18

上级 cab3ad84
......@@ -34,7 +34,7 @@ Implementation
上面的类图说明了必要的类及其之间的关系。
解决方案中仅增加了一个接口“`PrototypeCapable`”。 使用此接口的原因是[`Cloneable`接口](//howtodoinjava.com/java/cloning/cloneable-interface-is-broken-in-java/ "Cloneable interface is broken in java")的损坏行为。 该界面有助于实现以下目标:
解决方案中仅增加了一个接口“`PrototypeCapable`”。 使用此接口的原因是[`Cloneable`接口](//howtodoinjava.com/java/cloning/cloneable-interface-is-broken-in-java/ "Cloneable interface is broken in java")的损坏行为。 该接口有助于实现以下目标:
* 能够克隆原型而不知道它们的实际类型
* 提供要在注册表中使用的类型引用
......
......@@ -72,7 +72,7 @@ public class InputStreamReader extends Reader {...}
## 适配器模式应该执行多少工作?
答案真的很简单,它应该做很多工作,以便两个不兼容的界面都能相互适应。 例如,在我们上面的案例研究中,一个`InputStreamReader`只是包装了`InputStream`而没有其他内容。 然后,`BufferedReader`能够使用基础的`Reader`读取流中的字符。
答案真的很简单,它应该做很多工作,以便两个不兼容的接口都能相互适应。 例如,在我们上面的案例研究中,一个`InputStreamReader`只是包装了`InputStream`而没有其他内容。 然后,`BufferedReader`能够使用基础的`Reader`读取流中的字符。
```java
/**
......
......@@ -56,7 +56,7 @@ Final notes
* 定义具有子级的组件的行为。
* 存储子组件。
* 在`Component`界面中实现与子相关的操作。
* 在`Component`接口中实现与子相关的操作。
4. #### `Client`
* 通过`Component`接口操作组合中的对象。
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/design-patterns/structural/decorator-design-pattern/](https://howtodoinjava.com/design-patterns/structural/decorator-design-pattern/)
在软件工程中,**装饰器设计模式**用于向类的特定实例添加其他功能或行为,而不会修改同一类的其他实例。 装饰器提供了子类别的灵活替代方案,以扩展功能。 请注意,以上描述暗示装饰对象会更改其行为,但不会更改其界面
在软件工程中,**装饰器设计模式**用于向类的特定实例添加其他功能或行为,而不会修改同一类的其他实例。 装饰器提供了子类别的灵活替代方案,以扩展功能。 请注意,以上描述暗示装饰对象会更改其行为,但不会更改其接口
理解这种模式非常重要,因为一旦您了解了装饰技术,就可以赋予您(或其他人)对象新的职责,而无需对基础类进行任何代码更改。 有趣,不是吗? 这种模式也非常有用,并且经常会遇到 [**Java 面试问题**](//howtodoinjava.com/java/interviews-questions/core-java-interview-questions-series-part-1/ "Core java interview questions series : Part 1")关于[**设计模式**](//howtodoinjava.com/category/design-patterns/ "design patterns")的问题。
......@@ -198,7 +198,7 @@ Support data - support link - - support popup -
**B)装饰器模式和适配器模式之间的区别**
不可以。适配器模式用于将对象的界面转换为其他内容。 装饰器模式用于扩展对象的功能,同时保持其接口。 由于它们都“包裹”了一个对象,因此两者有时有时也被称为“包装模式”。
不可以。适配器模式用于将对象的接口转换为其他内容。 装饰器模式用于扩展对象的功能,同时保持其接口。 由于它们都“包裹”了一个对象,因此两者有时有时也被称为“包装模式”。
**C)装饰器模式与子类别之间的差异**
......
......@@ -6,7 +6,7 @@
## 1.何时使用外观模式
外观模式是**结构型设计模式**中的一种,另外还有四个[设计模式](https://howtodoinjava.com/gang-of-four-java-design-patterns/)。 当我们有一个复杂的系统要以简化的方式向客户公开时,外观模式是合适的。 其目的是将内部复杂性隐藏在从外部看起来很简单的单个界面后面。
外观模式是**结构型设计模式**中的一种,另外还有四个[设计模式](https://howtodoinjava.com/gang-of-four-java-design-patterns/)。 当我们有一个复杂的系统要以简化的方式向客户公开时,外观模式是合适的。 其目的是将内部复杂性隐藏在从外部看起来很简单的单个接口后面。
外观还可以将使用系统的代码与子系统的细节分离开来,从而使以后修改系统变得更加容易。
......@@ -16,7 +16,7 @@
在 Java 编程中,我们必须已连接到数据库以获取一些数据。 我们只是调用方法`dataSource.getConnection()`来获取连接,但是在内部发生了很多事情,例如加载驱动程序,创建连接或从池中获取连接,更新统计信息,然后将连接引用返回给调用者方法。 这是编程世界中外观模式的另一个示例。
同样,我们可以找到更多的示例,这些示例隐藏了许多内部复杂性,并为程序员提供了使用简单的界面来与系统一起工作。 所有这些都是外观示例。
同样,我们可以找到更多的示例,这些示例隐藏了许多内部复杂性,并为程序员提供了使用简单的接口来与系统一起工作。 所有这些都是外观示例。
## 3.外观设计模式示例
......@@ -182,11 +182,11 @@ Pdf Report written
请记住,外观不会降低复杂性。 它只对外部系统和客户端隐藏它。 因此,外观模式的主要受益者仅是客户端应用和其他系统。
它为客户提供了一个简单的界面,即,我们没有为客户展示一个复杂的子系统,而是为客户提供了一个简化的界面。 它还可以帮助我们减少客户端需要处理的对象数量。
它为客户提供了一个简单的接口,即,我们没有为客户展示一个复杂的子系统,而是为客户提供了一个简化的接口。 它还可以帮助我们减少客户端需要处理的对象数量。
#### 4.2 外观不限制对子系统的访问
外观不封装子系统类或接口。 它只是提供了一个简单的界面(或图层),使我们的生活更轻松。 我们可以自由公开子系统或整个子系统本身的任何功能。
外观不封装子系统类或接口。 它只是提供了一个简单的接口(或图层),使我们的生活更轻松。 我们可以自由公开子系统或整个子系统本身的任何功能。
它只会使代码看起来难看,否则它将起作用。
......@@ -194,7 +194,7 @@ Pdf Report written
[适配器模式](https://howtodoinjava.com/design-patterns/structural/adapter-design-pattern-in-java/)中,我们尝试更改接口,以便客户端可以使用系统。 否则,该系统将很难被客户端使用(甚至无法使用)。
外观模式简化了界面。 它为客户端提供了一个与之交互的简单界面(而不是复杂的子系统)。
外观模式简化了接口。 它为客户端提供了一个与之交互的简单接口(而不是复杂的子系统)。
#### 4.4 外观模式与中介者模式
......
......@@ -154,7 +154,7 @@ public class IsbnEditor extends PropertyEditorSupport {
> “不应强迫客户实现不必要的方法”
举个例子。 开发人员 Alex 创建了一个接口`Reportable`并添加了两种方法`generateExcel()``generatedPdf()`。 现在,客户“ A”希望使用此界面,但他打算仅使用 PDF 格式的报告,而不使用 excel。 他将能够轻松使用该功能吗?
举个例子。 开发人员 Alex 创建了一个接口`Reportable`并添加了两种方法`generateExcel()``generatedPdf()`。 现在,客户“ A”希望使用此接口,但他打算仅使用 PDF 格式的报告,而不使用 excel。 他将能够轻松使用该功能吗?
没有。 他将必须实现这两种方法,其中一种是软件设计人员要给他增加的负担。 他或者实现另一种方法,或者将其留空。 这不是一个好的设计。
......
......@@ -66,7 +66,7 @@ public class EmployeeStore implements IEmployeeStore
要解决此问题,我们必须退出电子邮件功能,以分离专门处理电子邮件相关功能的接口和类。 这样,我们可以确定其他功能不会受到影响。
基于我们的假设,我们可以抽象出两个接口`IEmailSender``IEmailContent`。 第一个界面负责电子邮件的发送过程,第二个界面负责传递电子邮件的内容及其类型。
基于我们的假设,我们可以抽象出两个接口`IEmailSender``IEmailContent`。 第一个接口负责电子邮件的发送过程,第二个接口负责传递电子邮件的内容及其类型。
重构的类在下面给出。
......
......@@ -173,7 +173,7 @@ with f:
```
## 报价单
## 引用
可以在 CSV 文件中引用单词。 Python CSV 模块中有**四种不同的引用模式**
......
# Python 将元组解压缩为变量或参数
# Python 将元组解为变量或参数
> 原文: [https://howtodoinjava.com/python/unpack-tuple-sequence/](https://howtodoinjava.com/python/unpack-tuple-sequence/)
Python 示例将 N 元素元组或序列解压缩为 N 个变量的集合。 Python 示例**将元组解包为变量**
Python 示例将 N 元素元组或序列解为 N 个变量的集合。 Python 示例**将元组解包为变量**
## 1\. Python 解元组示例
## 1\. Python 解元组示例
可以使用简单的赋值操作将任何序列(或可迭代)解压缩为变量。 唯一的要求是变量和结构的**数量与序列**匹配。
可以使用简单的赋值操作将任何序列(或可迭代)解为变量。 唯一的要求是变量和结构的**数量与序列**匹配。
#### 1.1 解示例 – 1
#### 1.1 解示例 – 1
```py
>>> data = (1, 2, 3)
......@@ -22,7 +22,7 @@ Python 示例将 N 元素元组或序列解压缩为 N 个变量的集合。 Pyt
```
#### 1.2 解示例 – 2
#### 1.2 解示例 – 2
```py
>>> data = [ 'Lokesh', 37, 73.5, (1981, 1, 1) ]
......@@ -49,7 +49,7 @@ Python 示例将 N 元素元组或序列解压缩为 N 个变量的集合。 Pyt
```
#### 1.3 解示例 – 3
#### 1.3 解示例 – 3
```py
>>> greeting = 'Hello'
......
......@@ -33,7 +33,7 @@ Python 示例,用于解包元组或序列或可迭代,以便该元组可能
```
## 2.解压缩元组并丢弃不需要的值
## 2.解元组并丢弃不需要的值
有时,您可能想拆开值并将其丢弃。 解包时,您不仅可以指定裸露的`*`,还可以使用通用的一次性变量名,例如“`_`”或忽略。
......
......@@ -212,7 +212,7 @@ public void destroy() {
> **阅读更多**: [Web 服务器如何工作?](//howtodoinjava.com/for-fun-only/a-birds-eye-view-on-how-web-servers-work/ "A birds-eye view on “how web servers work?”")
## 使用`@WebServlet`注开发 Servlet
## 使用`@WebServlet`注开发 Servlet
如果您不太喜欢 xml 配置,而是特别喜欢注释,那么 Servlets API 也可以。 您可以使用[`@WebServlet`](https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html "WebServlet")注释,如下例所示,然后您无需在`web.xml`中进行任何输入。 **容器将自动将您的 servlet 注册到运行时,并像往常一样处理它**
......
......@@ -290,7 +290,7 @@ public class MyUI extends UI {
如果您正在使用`web.xml`文件,请不要忘记删除`@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)`
## 生成生成的项目
## 构建生成的项目
现在该构建项目,以便它可以下载所有依赖项并将其包含在项目的运行时中。
......
......@@ -158,7 +158,7 @@ Vaadin 文本字段更改事件
```
2. #### 文本变更事件监听器
2. #### 文本更改事件监听器
有时,您可能希望尽快处理文本字段中的每个文本更改事件。 您可以使用`TextChangeListener`处理这些文本更改。
......
# SQL – 不使用临时表删除重复行
# SQL – 不使用临时表删除重复行
> 原文: [https://howtodoinjava.com/sql/how-to-remove-duplicate-rows-in-mysql-without-using-temporary-table/](https://howtodoinjava.com/sql/how-to-remove-duplicate-rows-in-mysql-without-using-temporary-table/)
......
......@@ -52,7 +52,7 @@ INSERT INTO Employee_Test VALUES (11,'Sudhir',800);
```
## 2\. 找到第 n 高薪水的SQL 查询
## 2\. 找到第 n 高薪水的 SQL 查询
因此,正如我们大多数人所知,查询是这样写的,以查找**第 N 高薪水**。 在下面的查询中,我们看到如何在不使用`max`函数的情况下在 sql 中找到最高薪水。
......
......@@ -4,7 +4,7 @@
重新安装 MySQL 服务器后,您是否曾经遇到过用户拒绝访问的问题或任何与登录有关的问题。 我遇到了这个问题,当我用 Google 搜索它时,我看到许多其他人也经常遭受这个问题的困扰。 在这篇文章中,我建议您尝试一下,它可以在 95% 的情况下解决此问题。
## 访问原因被拒绝错误
## 访问被拒绝错误的原因
用户“`root`”问题的访问被拒绝错误通常发生在您卸载并安装新版本甚至旧版本时。 问题在于由 mysql 卸载程序向导完成的不完整清理。 因此,解决方案也很简单,手动清除剩余的垃圾。
......
......@@ -157,7 +157,7 @@ public class TestAction extends ActionSupport
**注意**: Struts2 动作看起来像 POJO 类,因为它们必须充当动作形式,它们也是 Struts1 中的单独实体。
## 组成视图文件
## 构建视图文件
这是一般步骤,涉及编写视图层,例如,在我们的例子中,我们正在编写 jsp 文件。 您可以使用消息资源从属性文件中获取消息,稍后在 i18n 中提供帮助。
......
......@@ -132,7 +132,7 @@ public class TestAction extends ActionSupport
注意:Struts2 动作看起来像 POJO 类,因为它们也必须充当动作形式,它们也是 Struts1 中的单独实体。
## 构视图文件
## 构视图文件
这是一般步骤,涉及编写视图层,例如,在我们的例子中,我们正在编写 jsp 文件。 您可以使用消息资源从属性文件中获取消息,稍后在 i18n 中提供帮助。
......
......@@ -24,7 +24,7 @@
```
## 1)整合概述
## 1)概述
在进入集成细节之前,让我们先确定一下***为什么我们需要此集成***本身。 像 Struts 一样,Spring 也可以充当 MVC 实现。 两种框架都有其优缺点,仍然有很多人会同意 **Spring 更好**,并且提供了更广泛的功能。 对我来说,只有两种情况,您需要本教程中提供的信息:
......@@ -499,7 +499,7 @@ log4j.appender.R.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
```
#### b)顶级域
#### b)顶级域
如果您查看`web.xml`文件,我们在其中包含了一些 TLD。 我们可以随时在视图层中使用它们,如下所示:
......
......@@ -27,7 +27,7 @@ Caused by: Unable to find interceptor class referenced by ref-name customStack -
## 解
## 解决方案
要更改,您有两个选择:
......
......@@ -6,7 +6,7 @@
## 1.无效代码和无法访问的代码错误
为了理解代码,在这个题目中,我在下面给出了一段代码。 如果代码是在 Eclipse IDE 中编译的,请尝试确定代码中的问题。
为了理解无效代码,在这个题目中,我在下面给出了一段代码。 如果代码是在 Eclipse IDE 中编译的,请尝试确定代码中的问题。
```java
public class IdentifyProblemsInCode {
......@@ -50,9 +50,9 @@ public class IdentifyProblemsInCode {
为什么!
## 3.什么是代码
## 3.什么是无效代码
方法 2 中无法访问的代码称为“**代码**”。 这是**纯粹是 Eclipse 编译器报告的错误**,如果您使用“`javac`”编译上述类,则 Java 内置编译器将仅报错其他两种方法(第一和第三)。
方法 2 中无法访问的代码称为“**无效代码**”。 这是**纯粹是 Eclipse 编译器报告的错误**,如果您使用“`javac`”编译上述类,则 Java 内置编译器将仅报错其他两种方法(第一和第三)。
> **引用 Java 语言规范**
>
......
# 如何通过示例检测`LinkedList`中的无限循环
# 检测`LinkedList`中的无限循环的示例
> 原文: [https://howtodoinjava.com/puzzles/how-to-detect-infinite-loop-in-linkedlist-in-java-with-example/](https://howtodoinjava.com/puzzles/how-to-detect-infinite-loop-in-linkedlist-in-java-with-example/)
......
......@@ -129,7 +129,7 @@
#### 1.14 [Java 对象克隆](//howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/ "A guide to object cloning in java")
Java 中的对象**克隆**并非易事。 我自己花了很长时间了解 Java 的克隆。 看起来真的很简单; 使用`Cloneable`界面并覆盖`clone()`方法。 可是等等; 在面试中还有很多要说的和要问的。 例如:
Java 中的对象**克隆**并非易事。 我自己花了很长时间了解 Java 的克隆。 看起来真的很简单; 使用`Cloneable`接口并覆盖`clone()`方法。 可是等等; 在面试中还有很多要说的和要问的。 例如:
* `clone()`方法如何工作?
* Java 中的浅表复制是什么?
......
......@@ -118,7 +118,7 @@ public interface Collection extends Iterable {
这个面试问题的一个很好的答案是“**因为它们不兼容**”。 集合具有方法`add(Object o)`。 Map 无法使用这种方法,因为它需要键值对。 还有其他原因,例如`Map`支持`keySet``valueSet`等。`Collection`类没有此类视图。
由于存在如此大的差异,因此在`Map`界面中未使用`Collection`界面,而是在单独的层次结构中构建。
由于存在如此大的差异,因此在`Map`接口中未使用`Collection`接口,而是在单独的层次结构中构建。
## Java 集合面试 – 列出接口问题
......@@ -215,9 +215,9 @@ private static final Object PRESENT = new Object();
## Java 集合面试 – `Map`接口问题
#### 11)为什么要使用`Map`界面? 什么是实现`Map`接口的主要类?
#### 11)为什么要使用`Map`接口? 什么是实现`Map`接口的主要类?
`Map`接口是一种特殊的集合类型,它用于存储键值对。 因此,它不会扩展`Collection`接口。 该界面提供了在映射的各种视图上添加,删除,搜索或迭代的方法。
`Map`接口是一种特殊的集合类型,它用于存储键值对。 因此,它不会扩展`Collection`接口。 该接口提供了在映射的各种视图上添加,删除,搜索或迭代的方法。
实现`Map`接口的主要类有:`HashMap``Hashtable``EnumMap``IdentityHashMap``LinkedHashMap``Properties`
......@@ -275,9 +275,9 @@ transient Entry[] table;
阅读更多:[**如何为`HashMap`设计一个好的键?**](//howtodoinjava.com/java/collections/how-to-design-a-good-key-for-hashmap/ "How to design a good key for HashMap")
#### 16)`Map`界面提供哪些不同的集合视图?
#### 16)`Map`接口提供哪些不同的集合视图?
`Map`界面提供了 3 个存储在其中的键值对的视图:
`Map`接口提供了 3 个存储在其中的键值对的视图:
* 键集视图
* 值集视图
......
......@@ -28,7 +28,7 @@
| [桥接](//howtodoinjava.com/design-patterns/structural/bridge-design-pattern/) | 桥接器设计模式用于将一个类分解为两部分 - *抽象**实现* – 以便将来可以相互进化而不会相互影响。 它增加了类抽象与其实现之间的松散耦合。 |
| [组合](//howtodoinjava.com/design-patterns/structural/composite-design-pattern/) | 组合设计模式有助于将对象组合成树形结构,以表示整个部分的层次结构。 组合可以使客户统一对待单个对象和对象组成。 |
| [装饰器](//howtodoinjava.com/design-patterns/structural/decorator-design-pattern/) | 装饰器设计模式用于向类的特定实例添加其他功能或行为,而不会修改同一类的其他实例。 |
| [外观](https://howtodoinjava.com/design-patterns/structural/facade-design-pattern/) | 外观设计模式为子系统中的一组接口提供了统一的接口。 外观定义了一个更高级别的界面,使子系统更易于使用。 |
| [外观](https://howtodoinjava.com/design-patterns/structural/facade-design-pattern/) | 外观设计模式为子系统中的一组接口提供了统一的接口。 外观定义了一个更高级别的接口,使子系统更易于使用。 |
| [享元](https://howtodoinjava.com/design-patterns/structural/flyweight-design-pattern/) | 享元设计模式允许使用对象共享,以有效支持大量细粒度的对象。 享元是一个共享对象,可以同时在多个上下文中使用。 享元在每种情况下都充当独立对象。 |
| [代理](https://howtodoinjava.com/design-patterns/structural/proxy-design-pattern/) | 在代理设计模式中,代理对象为另一个对象提供代理或占位符,以控制对其的访问。 代理大量用于实现与延迟加载相关的用例,在这种情况下,我们直到真正需要时才创建完整的对象。 |
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册