Java中常见的设计模式和规范
发布时间: 2023-12-29 11:16:47 阅读量: 51 订阅数: 28 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
# 引言
## 1.1 设计模式和规范的概念
设计模式是在软件工程中针对特定问题的解决方案,它们是经过反复使用和验证的。而编程规范是一系列编码约定和最佳实践的集合,用于确保代码的可读性、可维护性和一致性。
## 1.2 Java 中设计模式和规范的重要性
在 Java 开发中,设计模式和规范起着至关重要的作用。设计模式可以提高代码的灵活性、可维护性和可扩展性,而规范可以确保团队成员之间的协作高效并减少差异性的问题。因此,深入了解设计模式和严格遵循规范对于开发高质量的 Java 应用程序至关重要。
### 2. 创建型设计模式
在软件开发中,创建型设计模式主要用于处理对象的创建机制,以帮助创建对象的方式更加灵活和具备复用性。
#### 2.1 单例模式
单例模式是一种用于限制类只能实例化一个对象的创建型设计模式。它确保一个类只有一个实例,并提供一个全局访问点。
**场景示例:**
```java
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造函数
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
public class Main {
public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
System.out.println(obj1 == obj2); // 输出 true
}
}
```
**代码解释与总结:**
在单例模式中,通过将构造函数设置为私有,可以防止通过 `new` 关键字多次实例化该类。`getInstance` 方法负责返回唯一的实例,并在第一次调用时进行实例化。这样可以确保全局范围内只有一个实例对象。
**结果说明:**
运行示例代码,可以看到 `obj1` 和 `obj2` 输出为 true,说明它们引用的是同一个实例对象。
#### 2.2 工厂模式
工厂模式是一种用于创建对象的创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪个类。这样可以将创建对象的过程延迟到子类。
**场景示例:**
```java
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle draw() method.");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Square draw() method.");
}
}
class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
}
return null;
}
}
public class Main {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw(); // 输出:Circle draw() method.
Shape square = shapeFactory.getShape("SQUARE");
square.draw(); // 输出:Square draw() method.
}
}
```
**代码解释与总结:**
在工厂模式中,`Shape` 接口定义了图形对象的通用行为,而 `ShapeFactory` 负责根据输入的类型字符串创建并返回具体的图形对象。
**结果说明:**
运行示例代码,可以看到根据不同的类型参数创建出了对应的图形对象,并调用其特定的方法进行输出。
以上是创建型设计模式中的两种典型模式,后续章节将继续介绍不同类型的设计模式及其在实际项目中的应用。
### 结构型设计模式
结构型设计模式是关于对象组合的设计模式,它涉及如何组合类和对象以获得更大的结构。
#### 代理模式
代理模式是结构型设计模式的一种,它允许对象通过代理来控制其访问。这种类型的设计模式属于结构型模式。
```java
// 代理接口
public interface Image {
void display();
}
// 真实对象
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadImageFromDisk();
}
@Override
public void display() {
System.out.println("Displaying " + filename);
}
private void loadImageFromDisk() {
System.out.println("Loading " + filename + " from disk");
}
}
// 代理对象
public class ProxyImage implements Image {
private RealImage realImage;
private String filename;
public ProxyImage(String filename) {
this.filename = filename;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(filename);
}
realImage.display();
}
}
// 使用代理对象
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test.jpg");
// 图像将从磁盘加载
image.display();
// 图像将无需从磁盘加载
image.display();
}
}
```
**代码总结:** 代理模式允许我们在访问对象时提供一个替代者来控制对该对象的访问。这在需要对对象进行更复杂的控制或隐藏真实对象的实现细节时非常有用。
**结果说明:**
0
0
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://img-home.csdnimg.cn/images/20250102104920.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)