Contents

2.1_Design_Patterns

Creational, Structural, and Behavioural Patterns

The Gang of Four’s catalog contains 23 patterns categorized into Creational, Structural, and Behavioral patterns. 根据不同的项目选择不同的设计模式

Creational Patterns 创建型模式

它们帮助一个系统独立于如何创建、组合和表示它的那些对象。

  • 一个类创建型模式使用继承改变被实例化的类。
  • 一个对象创建型模式将实例化委托给另一个对象。

Singleton Pattern

一个类只实例化一个对象,实现方式是将构造函数私有化,通过调用公用的getInstance来获取对象。

Factory Method Pattern

创建一个工厂,负责创建相关的对象。其他类通过调用工厂的创建函数来创建对象。这些对象的使用者不需要关心对象是如何创建的

Factory Method设计目的是定义一个创建对象的接口,让子类决定实例化哪个类

主要参与者

  1. Creator: factory method的父类或者接口,返回一个产品实例对象。Creator创建完产品以后,可以再执行一些默认动作。
  2. Concrete Creator: Creator的子类,实现了类中的factory method,创建指定类型的产品。
  3. Product: factory method创建出来的产品的接口或抽象类。
  4. Concrete Product: 具体的产品,对于Product的实现。
// Product Interface
public interface Vehicle {
    void manufacture();
}

// Concrete Products
public class Car implements Vehicle {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing a Car");
    }
}

public class Motorcycle implements Vehicle {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing a Motorcycle");
    }
}

// Creator
public abstract class VehicleFactory {
    public Vehicle orderVehicle(String type) {
        Vehicle vehicle = createVehicle(type);
        
        vehicle.manufacture();
        // Other vehicle related operations
        
        return vehicle;
    }
    
    protected abstract Vehicle createVehicle(String type);
}

// Concrete Creators
public class CarFactory extends VehicleFactory {
    @Override
    protected Vehicle createVehicle(String type) {
        if (type.equals("car")) {
            return new Car();
        } else {
            throw new IllegalArgumentException("Invalid vehicle type: " + type);
        }
    }
}

public class MotorcycleFactory extends VehicleFactory {
    @Override
    protected Vehicle createVehicle(String type) {
        if (type.equals("motorcycle")) {
            return new Motorcycle();
        } else {
            throw new IllegalArgumentException("Invalid vehicle type: " + type);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        VehicleFactory carFactory = new CarFactory();
        VehicleFactory motorcycleFactory = new MotorcycleFactory();

        Vehicle vehicle1 = carFactory.orderVehicle("car");
        System.out.println("Ordered: " + vehicle1.getClass().getSimpleName());

        Vehicle vehicle2 = motorcycleFactory.orderVehicle("motorcycle");
        System.out.println("Ordered: " + vehicle2.getClass().getSimpleName());
    }
}

How It Works

Creator (VehicleFactory): Defines the orderVehicle method which uses createVehicle (the factory method) to instantiate the desired vehicle type (Car or Motorcycle).

Concrete Creators (CarFactory, MotorcycleFactory): Implement createVehicle to return specific types of vehicles (Car, Motorcycle).

Product (Vehicle) and Concrete Products (Car, Motorcycle): Define the interface (Vehicle) and concrete implementations (Car, Motorcycle) which the creators (VehicleFactory subclasses) instantiate.

Benefits

Flexibility: Allows adding new vehicle types (Car variations, Motorcycle variations) without modifying existing code (VehicleFactory).

Encapsulation: Encapsulates object creation logic, promoting code readability and maintenance.

Separation of Concerns: Separates client code from object creation, promoting single responsibility principle.

Structure Patterns 结构型模式

结构型模式关注对象之间的关系

Behavior Patterns 行为型模式

用来识别对象之间的常用交流模式并加以实现