java架构师必懂的五种设计模式

本文通过实例展示了Java中的五种设计模式:单例模式创建唯一实例,工厂模式用于对象创建,观察者模式支持发布/订阅机制,策略模式定义算法的替换,装饰器模式动态添加行为。这些模式有助于提高代码的可扩展性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 单例模式 (Singleton Pattern)

public class Singleton {
    private static Singleton instance;
    private Singleton() {
       // 私有构造方法
    }
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
    
    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        // 使用单例对象进行操作
    }
}

2. 工厂模式 (Factory Pattern)

interface Shape {
    void draw();
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a rectangle.");
    }
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a circle.");
    }
}

class ShapeFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        }
        return null;
    }
}

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
        
        Shape rectangle = shapeFactory.createShape("rectangle");
        rectangle.draw(); // 输出:Draw a rectangle.
        
        Shape circle = shapeFactory.createShape("circle");
        circle.draw(); // 输出:Draw a circle.
    }
}

3. 观察者模式 (Observer Pattern)

import java.util.ArrayList;
import java.util.List;

interface Observer {
    void update(String message);
}

class Subscriber implements Observer {
    private String name;
    
    public Subscriber(String name) {
        this.name = name;
    }
    
    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}

interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers(String message);
}

class Newsletter implements Subject {
    private List<Observer> subscribers = new ArrayList<>();
    
    @Override
    public void attach(Observer observer) {
        subscribers.add(observer);
    }
    
    @Override
    public void detach(Observer observer) {
        subscribers.remove(observer);
    }
    
    @Override
    public void notifyObservers(String message) {
        for (Observer observer : subscribers) {
            observer.update(message);
        }
    }
}

public class ObserverPatternDemo {
    public static void main(String[] args) {
        Newsletter newsletter = new Newsletter();
        
        Observer subscriber1 = new Subscriber("Subscriber1");
        Observer subscriber2 = new Subscriber("Subscriber2");
        
        newsletter.attach(subscriber1);
        newsletter.attach(subscriber2);
        
        newsletter.notifyObservers("New article published.");
        // 输出:
        // Subscriber1 received message: New article published.
        // Subscriber2 received message: New article published.
        
        newsletter.detach(subscriber2);
        
        newsletter.notifyObservers("Special promotion announced.");
        // 输出:
        // Subscriber1 received message: Special promotion announced.
    }
}

4. 策略模式 (Strategy Pattern)

interface SortStrategy {
    void sort(int[] arr);
}

class BubbleSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] arr) {
        // 冒泡排序算法实现
        System.out.println("Bubble sort strategy applied.");
    }
}

class QuickSortStrategy implements SortStrategy {
    @Override
    public void sort(int[] arr) {
        // 快速排序算法实现
        System.out.println("Quick sort strategy applied.");
    }
}

class SortContext {
    private SortStrategy strategy;
    
    public void setStrategy(SortStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void performSort(int[] arr) {
        strategy.sort(arr);
    }
}

public class StrategyPatternDemo {
    public static void main(String[] args) {
        SortContext sortContext = new SortContext();
        
        int[] arr = {5, 2, 7, 1, 4};
        
        SortStrategy bubbleSortStrategy = new BubbleSortStrategy();
        sortContext.setStrategy(bubbleSortStrategy);
        sortContext.performSort(arr); // 输出:Bubble sort strategy applied.
        
        SortStrategy quickSortStrategy = new QuickSortStrategy();
        sortContext.setStrategy(quickSortStrategy);
        sortContext.performSort(arr); // 输出:Quick sort strategy applied.
    }
}

5. 装饰器模式 (Decorator Pattern)

interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

abstract class ShapeDecorator implements Shape {
    protected Shape decoratedShape;
    
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }
    
    @Override
    public void draw() {
        decoratedShape.draw();
    }
}

class RedShapeDecorator extends ShapeDecorator {
    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }
    
    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }
    
    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Border color: Red");
    }
}

public class DecoratorPatternDemo {
    public static void main(String[] args) {
        Shape circle = new Circle();
        
        circle.draw(); // 输出:Drawing a circle.
        
        Shape redCircle = new RedShapeDecorator(new Circle());
        redCircle.draw();
        // 输出:
        // Drawing a circle.
        // Border color: Red
    }
}

以上代码示例展示了单例模式、工厂模式、观察者模式、策略模式和装饰器模式的用法。每个示例都包含了一个 main 函数来演示代码的用法。这些设计模式都是常见的、广泛应用于软件开发中的设计模式,可以提供可扩展、灵活和可维护的解决方案。

### 设计模式概述 设计模式是一种经过验证的解决方案,用于解决软件开发过程中常见的问题。对于Java架构师而言,掌握设计模式不仅能够提升代码质量,还能提高系统的可维护性和扩展性。以下是24种常用设计模式及其详细介绍。 --- ### 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供全局访问点。这种模式常用于管理共享资源,如缓存、日志记录器等。 ```java 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; } } ``` [^1] --- ### 工厂方法模式 (Factory Method Pattern) 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这种方式让类的实例化推迟到子类。 ```java interface Product { void use(); } class ConcreteProduct implements Product { @Override public void use() { System.out.println("Using concrete product"); } } abstract class Creator { abstract Product factoryMethod(); void operation() { Product product = factoryMethod(); // 使用工厂方法创建产品 product.use(); } } class ConcreteCreator extends Creator { @Override Product factoryMethod() { return new ConcreteProduct(); } } ``` [^2] --- ### 抽象工厂模式 (Abstract Factory Pattern) 抽象工厂模式提供了一组相关或依赖的对象的创建方式,而无需指定它们的具体类。 ```java interface AbstractFactory { ProductA createProductA(); ProductB createProductB(); } class ConcreteFactory1 implements AbstractFactory { @Override public ProductA createProductA() { return new ProductA1(); } @Override public ProductB createProductB() { return new ProductB1(); } } ``` [^3] --- ### 原型模式 (Prototype Pattern) 原型模式通过复制现有对象来创建新对象,而不是通过常规构造函数。这可以显著减少初始化成本。 ```java import java.util.Hashtable; abstract class Prototype { abstract Prototype clone(); } class ConcretePrototype extends Prototype { private String field; public ConcretePrototype(String field) { this.field = field; } @Override Prototype clone() { return new ConcretePrototype(this.field); } } ``` [^4] --- ### 构建者模式 (Builder Pattern) 构建者模式将复杂的对象构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 ```java class Computer { private String cpu, ram, storage; public void setCPU(String val) { this.cpu = val; } public void setRAM(String val) { this.ram = val; } public void setStorage(String val) { this.storage = val; } public void showSpecs() { System.out.println(cpu + ", " + ram + ", " + storage); } } class ComputerBuilder { private Computer computer = new Computer(); public ComputerBuilder setCpu(String val) { computer.setCPU(val); return this; } public ComputerBuilder setRam(String val) { computer.setRAM(val); return this; } public Computer build() { return computer; } } ``` [^5] --- ### 适配器模式 (Adapter Pattern) 适配器模式允许两个原本不兼容的类协同工作。它通常涉及封装旧组件并将其转换为新的API形式。 ```java interface Target { void request(); } class Adaptee { public void specificRequest() { System.out.println("Specific Request"); } } class Adapter implements Target { private final Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } ``` [^6] --- ### 桥接模式 (Bridge Pattern) 桥接模式将抽象部分与其实现部分分离,使两者都可以独立变化。 ```java interface Implementor { void operationImpl(); } class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("Concrete A Implementation"); } } abstract class Abstraction { protected Implementor implementor; public Abstraction(Implementor impl) { this.implementor = impl; } abstract void operation(); } class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor impl) { super(impl); } @Override void operation() { implementor.operationImpl(); } } ``` [^7] --- ### 组合模式 (Composite Pattern) 组合模式允许客户端以统一的方式处理单个对象和对象容器。 ```java interface Component { void operation(); } class Leaf implements Component { @Override public void operation() { System.out.println("Leaf Operation"); } } class Composite implements Component { List<Component> children = new ArrayList<>(); @Override public void operation() { for (Component child : children) { child.operation(); } } public void add(Component c) { children.add(c); } } ``` [^8] --- ### 装饰器模式 (Decorator Pattern) 装饰器模式可以在不影响其他对象的情况下动态地给某个对象添加职责。 ```java abstract class Coffee { public abstract double getCost(); public abstract String getDescription(); } class SimpleCoffee extends Coffee { @Override public double getCost() { return 10; } @Override public String getDescription() { return "Simple coffee"; } } abstract class CoffeeDecorator extends Coffee { protected Coffee decoratedCoffee; public CoffeeDecorator(Coffee c) { this.decoratedCoffee = c; } @Override public double getCost() { return decoratedCoffee.getCost(); } @Override public String getDescription() { return decoratedCoffee.getDescription(); } } class MilkDecorator extends CoffeeDecorator { public MilkDecorator(Coffee c) { super(c); } @Override public double getCost() { return super.getCost() + 3; } @Override public String getDescription() { return super.getDescription() + ", milk"; } } ``` [^9] --- ### 外观模式 (Facade Pattern) 外观模式提供了一个简化接口,隐藏了复杂子系统的细节。 ```java class SubsystemA { public void operationA() { System.out.println("Operation A"); } } class Facade { private final SubsystemA subsystemA = new SubsystemA(); public void simplifiedOperation() { subsystemA.operationA(); } } ``` [^10] --- ### **更多设计模式详见补充文档** 由于篇幅限制,剩余设计模式(观察者模式、策略模式、命令模式等)将在后续章节展开说明。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超维Ai编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值