设计模式概述

Head First设计模式详解与应用场景分析

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨《Head First设计模式》这本经典著作中介绍的设计模式,以及它们在实际应用中的场景分析。

设计模式概述

设计模式是解决软件设计中常见问题的可重用解决方案。它们由经验丰富的开发者总结和提炼,能够帮助开发者构建更加灵活、可维护和可扩展的软件系统。《Head First设计模式》一书系统地介绍了23种经典的设计模式,分为三大类:创建型模式、结构型模式和行为型模式。

创建型模式

工厂模式(Factory Pattern)

工厂模式用于创建对象,而不需要指定具体类的类型。它包括简单工厂模式、工厂方法模式和抽象工厂模式。下面是一个简单工厂模式的示例:

java 复制代码
package cn.juwatech.designpatterns.factory;

// 抽象产品
interface Shape {
    void draw();
}

// 具体产品1
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("画一个圆形");
    }
}

// 具体产品2
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("画一个矩形");
    }
}

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

// 客户端代码
public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactory();

        Shape shape1 = factory.createShape("circle");
        shape1.draw();

        Shape shape2 = factory.createShape("rectangle");
        shape2.draw();
    }
}

结构型模式

适配器模式(Adapter Pattern)

适配器模式用于将一个类的接口转换成客户端所期望的另一个接口。它通常用于旧系统与新系统的兼容,或者接口不兼容的情况。以下是适配器模式的示例:

java 复制代码
package cn.juwatech.designpatterns.adapter;

// 目标接口
interface Target {
    void request();
}

// 需要适配的类
class Adaptee {
    public void specificRequest() {
        System.out.println("适配者中的业务逻辑代码被调用");
    }
}

// 适配器
class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

// 客户端代码
public class AdapterPatternDemo {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);

        target.request();
    }
}

行为型模式

观察者模式(Observer Pattern)

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。主题对象在状态变化时会通知所有的观察者对象。以下是观察者模式的示例:

java 复制代码
package cn.juwatech.designpatterns.observer;

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

// 主题接口
interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// 具体主题
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update();
        }
    }
}

// 观察者接口
interface Observer {
    void update();
}

// 具体观察者
class ConcreteObserver implements Observer {
    private ConcreteSubject subject;

    public ConcreteObserver(ConcreteSubject subject) {
        this.subject = subject;
        this.subject.registerObserver(this);
    }

    @Override
    public void update() {
        System.out.println("观察者收到主题状态变化通知,新状态为:" + subject.getState());
    }
}

// 客户端代码
public class ObserverPatternDemo {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();

        Observer observer1 = new ConcreteObserver(subject);
        Observer observer2 = new ConcreteObserver(subject);

        subject.setState(10);
    }
}

总结

通过本文,我们深入学习了《Head First设计模式》中的几种经典设计模式,并通过代码示例演示了它们的基本实现和应用场景。设计模式是软件开发中的重要工具,能够提高代码的复用性、可读性和可维护性。希望本文能够帮助您理解和应用设计模式,在实际项目中编写更加健壮和灵活的Java程序。

相关推荐
2401_857439692 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
SoraLuna3 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹4 小时前
基于java的改良版超级玛丽小游戏
java
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭4 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫4 小时前
泛型(2)
java
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石5 小时前
12/21java基础
java