Java设计模式PDF清华大学出版社

设计模式是软件开发中一种被广泛应用的方法,它提供了一种通用的解决方案,帮助我们解决常见的设计问题。《Java设计模式》是一本由清华大学出版社出版的经典书籍,其中详细介绍了23种常见的设计模式,并提供了大量的示例代码和应用场景。

什么是设计模式

设计模式是在软件开发中经常出现的一些问题的解决方案。它提供了一种通用的解决方案,可以帮助我们更好地编写可复用、可维护和可扩展的代码。设计模式可以分为三种类型:创建型模式、结构型模式和行为型模式。

创建型模式

创建型模式关注对象的创建过程,它们包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式等。下面我们以工厂模式为例,看看它的代码示例。

// 工厂接口
public interface ShapeFactory {
    Shape createShape();
}

// 圆形工厂
public class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

// 正方形工厂
public class SquareFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

// 形状接口
public interface Shape {
    void draw();
}

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

// 正方形类
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a square");
    }
}

结构型模式

结构型模式关注对象之间的组合,它们包括适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式等。下面我们以代理模式为例,看看它的代码示例。

// 主题接口
public interface Subject {
    void request();
}

// 真实主题
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("Real subject is handling the request");
    }
}

// 代理
public class Proxy implements Subject {
    private RealSubject realSubject;

    @Override
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();
    }
}

行为型模式

行为型模式关注对象之间的通信,它们包括模板方法模式、策略模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式和中介者模式等。下面我们以策略模式为例,看看它的代码示例。

// 策略接口
public interface Strategy {
    void execute();
}

// 具体策略A
public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy A");
    }
}

// 具体策略B
public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy B");
    }
}

// 上下文
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

类图

下面是一个简单的类图,展示了工厂模式、代理模式和策略模式的类之间的关系。

classDiagram
    class Shape
    class Circle
    class Square
    class ShapeFactory
    class CircleFactory
    class SquareFactory
    Shape <|-- Circle
    Shape <|-- Square
    ShapeFactory <|-- CircleFactory
    ShapeFactory <|-- SquareFactory

    class Subject
    class RealSubject
    class Proxy
    Subject <|-- RealSubject
    Subject <|-- Proxy

    class Strategy
    class ConcreteStrategyA
    class ConcreteStrategyB