Head First设计模式学习笔记

简介: Head First设计模式学习笔记

Head First设计模式学习笔记

今天我们将深入探讨《Head First设计模式》这本经典的学习笔记,帮助您理解和应用软件设计中的关键概念。


为什么要学习设计模式?

设计模式是在软件设计中反复出现的问题的解决方案,它们被广泛应用于提高代码的重用性、灵活性和可维护性。掌握设计模式不仅可以帮助我们更好地理解优秀的软件设计实践,还能够提高我们的设计能力和编码水平。

设计模式的分类

设计模式可以分为三类:创建型模式、结构型模式和行为型模式。我们将介绍每一类模式,并结合Java代码来说明它们的具体应用。

1. 创建型模式

创建型模式关注对象的创建机制,帮助我们更加灵活地创建对象,同时尽量减少耦合。

工厂方法模式(Factory Method Pattern)

工厂方法模式通过定义一个创建对象的接口,但让子类决定实例化哪个类。这样,工厂方法模式让一个类的实例化延迟到其子类。

package cn.juwatech.factoryexample;
// 抽象产品
interface Product {
    void operation();
}
// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}
// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}
// 抽象工厂
abstract class Factory {
    abstract Product createProduct();
}
// 具体工厂A
class ConcreteFactoryA extends Factory {
    @Override
    Product createProduct() {
        return new ConcreteProductA();
    }
}
// 具体工厂B
class ConcreteFactoryB extends Factory {
    @Override
    Product createProduct() {
        return new ConcreteProductB();
    }
}
public class FactoryPatternDemo {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();
    }
}
2. 结构型模式

结构型模式关注如何将类或对象结合在一起形成更大的结构。

适配器模式(Adapter Pattern)

适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

package cn.juwatech.adapterexample;
// 目标接口
interface Target {
    void request();
}
// 需要适配的类(被适配者)
class Adaptee {
    void specificRequest() {
        System.out.println("Adaptee specificRequest");
    }
}
// 适配器类
class Adapter implements Target {
    private Adaptee adaptee;
    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 adapter = new Adapter(adaptee);
        adapter.request();
    }
}
3. 行为型模式

行为型模式关注对象之间的通信,帮助我们更好地分配职责和定义对象之间的交互模式。

观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都将得到通知并自动更新。

package cn.juwatech.observeexample;
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(state);
        }
    }
}
// 观察者接口
interface Observer {
    void update(int state);
}
// 具体观察者A
class ConcreteObserverA implements Observer {
    @Override
    public void update(int state) {
        System.out.println("ConcreteObserverA updated with state: " + state);
    }
}
// 具体观察者B
class ConcreteObserverB implements Observer {
    @Override
    public void update(int state) {
        System.out.println("ConcreteObserverB updated with state: " + state);
    }
}
public class ObserverPatternDemo {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        Observer observerA = new ConcreteObserverA();
        Observer observerB = new ConcreteObserverB();
        subject.registerObserver(observerA);
        subject.registerObserver(observerB);
        subject.setState(10);
        subject.setState(20);
        subject.removeObserver(observerA);
        subject.setState(30);
    }
}

总结

本文介绍了《Head First设计模式》中的部分设计模式,包括工厂方法模式、适配器模式和观察者模式,并提供了相应的Java代码示例。设计模式是软件开发中非常重要的一部分,它们帮助我们解决常见问题,并促进代码的重用和维护。


目录
打赏
0
1
1
0
120
分享
相关文章
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
45 2
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
53 0
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
41 0
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
169 0
【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)
113 0
【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)
120 0
【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
89 0
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
105 11
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
8天前
|
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
66 40
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等