Java中的设计模式概述
发布时间: 2024-02-28 15:05:41 阅读量: 14 订阅数: 20
# 1. 设计模式概述
## 1.1 什么是设计模式
设计模式是针对软件设计中常见问题的可复用解决方案。它们代表了经验丰富的开发人员在解决类似设计问题时所积累的最佳实践和解决方案。
设计模式不是可以直接转化为代码的具体算法或者代码片段,而是一种在特定情景下解决问题的描述或模板。通过使用设计模式,开发人员可以借鉴过去的成功经验,提高代码的可重用性、可读性和可靠性。
## 1.2 设计模式的分类
设计模式按照其目的和作用可以分为创建型模式、结构型模式和行为型模式三大类。
- 创建型模式关注对象的创建机制,包括工厂模式、单例模式、原型模式和建造者模式。
- 结构型模式关注对象和类的组合,以实现新功能,包括适配器模式、装饰器模式、代理模式和桥接模式。
- 行为型模式关注对象之间的交互,包括策略模式、观察者模式、模板方法模式和迭代器模式。
## 1.3 设计模式的重要性
设计模式是软件开发中非常重要的一部分,它们可以提供通用的解决方案,并帮助开发人员避免重复造轮子。同时,通过应用设计模式,开发人员可以更好地理解代码,并且提高代码的可维护性和可扩展性。设计模式还可以促进团队间的沟通和协作,在软件开发中起到了至关重要的作用。
# 2. 创建型设计模式
创建型设计模式主要关注对象的创建机制,包括对象的实例化方式、对象的创建过程中的构造逻辑等。创建型设计模式能够帮助我们更灵活地创建对象,避免直接使用new关键字进行对象的实例化,从而降低模块之间的耦合度。
### 2.1 工厂模式(Factory Pattern)
工厂模式是一种常见的创建型设计模式,它包括工厂方法模式和抽象工厂模式两种主要形式。工厂模式通过定义一个创建对象的接口,让子类决定实例化哪个类,可以将对象的实例化延迟到子类进行。
**场景:**
假设我们有一个形状接口Shape和它的实现类Circle和Rectangle,通过工厂模式来创建这些形状对象。
**代码示例:**
```java
// Shape.java
public interface Shape {
void draw();
}
// Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
// Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
// ShapeFactory.java
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// 获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
// 获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
shape2.draw();
}
}
```
**代码总结:**
工厂模式通过ShapeFactory工厂类来创建Shape对象的实例,根据不同的参数返回不同的具体实现类的实例。
**结果说明:**
程序运行结果为:
```
Inside Circle::draw() method.
Inside Rectangle::draw() method.
```
### 2.2 单例模式(Singleton Pattern)
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。
**场景:**
假设我们需要创建一个日志记录器Logger,确保整个应用程序只有一个Logger实例来记录日志。
**代码示例:**
```java
// Logger.java
public class Logger {
// 创建 Logger 的一个对象
private static Logger instance = new Logger();
// 让构造函数为 private,这样该类就不会被实例化
private Logger() {}
// 获取唯一可用的对象
public static Logger getInstance() {
return instance;
}
// 记录日志
public void log(String message) {
System.out.println("Log: " + message);
}
}
// Main.java
public class Main {
public static void main(String[] args) {
// 获取Logger对象
Logger logger = Logger.getInstance();
// 记录日志
logger.log("This is a log message.");
}
}
```
**代码总结:**
单例模式通过将构造函数私有化,通过静态方法获取唯一的实例对象,确保整个应用程序中只有一个实例。
**结果说明:**
程序运行结果为:
```
Log: This is a log message.
```
以上是创建型设计模式中的两种常见模式,它们分别用于灵活创建对象和确保某个类只有一个实例。接下来的原型模式和建造者模式等也是创建型模式中常用的方式,可以根据具体场景选择合适的设计模式来进行对象的创建。
# 3. 结构型设计模式
在软件开发中,结构型设计模式主要用于处理类或对象之间的组合,以达到构建更大系统结构的目的。接下来将介绍几种常见的结构型设计模式:
#### 3.1 适配器模式(Adapter Pattern)
适配器模式是一种将一个类的接口转换成客户希望的另外一个接口的设计模式。它可以让原本不兼容的接口能够一起工作,提高代码的复用性。
```java
// 目标接口
interface Target {
void request();
}
// 需要适配的类
class Adaptee {
void specificRequest() {
System.ou
```
0
0