Java设计模式
1. 概述
设计模式是一套被广泛接受和使用的面向对象编程解决方案,它提供了一种可重用的解决方案,用于常见的软件设计问题。在Java中,有23种经典的设计模式,它们被分为三类:创建型模式、结构型模式和行为型模式。本文将介绍Java的设计模式及其使用。
2. 流程
下面是学习Java设计模式的流程:
步骤 | 描述 |
---|---|
1 | 了解设计模式的概念和重要性 |
2 | 学习每种设计模式的原理和使用场景 |
3 | 实践使用设计模式 |
4 | 总结和复习设计模式的使用 |
3. 学习每种设计模式的步骤和代码示例
3.1 创建型模式
3.1.1 单例模式
步骤:
- 创建一个私有的静态实例变量来保存单例对象。
- 创建一个私有的构造方法,防止外部实例化该类。
- 提供一个公共的静态方法来获取单例对象。
- 在公共静态方法中,使用双重检查锁定来确保只有一个线程可以实例化对象。
示例代码:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {
// 私有构造方法
}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
3.1.2 工厂模式
步骤:
- 创建一个工厂接口,定义产品的创建方法。
- 创建多个产品类,实现工厂接口。
- 创建一个工厂实现类,根据不同的条件返回不同的产品实例。
示例代码:
public interface ShapeFactory {
Shape createShape();
}
public class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
public class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
}
3.1.3 抽象工厂模式
步骤:
- 创建一个抽象工厂接口,定义多个产品族的创建方法。
- 创建多个产品族接口,定义具体产品的创建方法。
- 创建多个具体产品族类,实现产品族接口。
- 创建一个抽象工厂实现类,根据不同的条件返回不同的产品族实例。
示例代码:
public interface AbstractFactory {
Shape createShape();
Color createColor();
}
public interface ShapeFactory {
Shape createShape();
}
public interface ColorFactory {
Color createColor();
}
public class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
public class RedColorFactory implements ColorFactory {
@Override
public Color createColor() {
return new RedColor();
}
}
public class RedCircleFactory implements AbstractFactory {
@Override
public Shape createShape() {
return new Circle();
}
@Override
public Color createColor() {
return new RedColor();
}
}
3.1.4 建造者模式
步骤:
- 创建一个产品类,定义多个属性和对应的设置方法。
- 创建一个抽象建造者类,定义产品的创建和组装方法。
- 创建多个具体建造者类,实现抽象建造者类,根据不同的步骤和顺序构建产品。
- 创建一个指挥者类,负责调用具体建造者的方法来构建产品。
示例代码:
public class Product {
private String part1;
private String part2;
public void setPart1(String part1) {
this.part1 = part1;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
public abstract class Builder {
protected Product product = new Product();
public abstract