学习笔记-设计模式-分类

ragnar 1年前 ⋅ 183 阅读

学习还得从疑问开始:设计模式具体是什么?为什么要用设计模式?怎么用设计模式?

设计模式具体是什么?

设计模式是一种可以被重复使用的解决问题的方式,它是在软件设计过程中的一种经验总结和归纳,并被广泛认同为解决特定问题的最佳实践。

举例说明,下面以一个场景为例:

假设我们正在开发一个游戏,需要实现一个英雄类,并且想要增加一个技能施放的功能。

在这个场景中,我们可以使用设计模式的一种--策略模式。策略模式定义了一系列的算法,每个算法都是独立的,它们可以在不影响客户端的情况下互换使用。在这个具体的场景中,我们可以将技能施放看作为一种算法,而每个英雄可以选择不同的技能施放方式。

具体的实现过程如下:

首先,我们可以定义一个技能接口:

interface Skill {
    public void useSkill();
}

然后,对于具体的技能,我们分别创建实现类:

class FireSkill implements Skill {
    public void useSkill() {
        System.out.println("使用火球术技能!");
    }
}

class FrostSkill implements Skill {
    public void useSkill() {
        System.out.println("使用霜冻技能!");
    }
}

最后,我们在英雄类中创建一个技能属性,通过传入不同的实现类对象来实现技能的独立使用:

class Hero {
    private Skill skill;

    public void setSkill(Skill skill) {
        this.skill = skill;
    }

    public void useSkill() {
        skill.useSkill();
    }
}

public class Application {
    public static void main(String[] args) {
        Hero hero = new Hero();
        Skill fireSkill = new FireSkill();
        Skill frostSkill = new FrostSkill();
        hero.setSkill(fireSkill);
        hero.useSkill();
        hero.setSkill(frostSkill);
        hero.useSkill();
    }
}

上述代码中,我们通过创建具体的技能实例,来改变英雄对象的技能属性,并调用英雄对象的使用技能方法,从而实现了技能选择的功能。这是一个很好的策略模式的例子。

我们在编程中为什么要用设计模式?

设计模式给我们带来什么?

好处

  • 增加代码的可重用性:设计模式把一些常用的设计方式和解决问题的方法进行了归纳总结,让我们在遇到类似的问题时可以快速的运用设计模式来解决,达到代码的可重用性。

  • 提高代码的可维护性:使用设计模式可以让代码更加清晰、有组织,更容易理解,并且可以遵循面向对象的设计原则,使代码更加易于维护。

  • 提高代码的可扩展性:设计模式可以使代码的组织结构更加灵活,具有很好的扩展性,让我们在需要增加功能时可以更简单的进行扩展。

  • 增加代码的可靠性:使用设计模式可以减少代码的错误率,提高代码的稳定性和可靠性。

坏处

  • 使用设计模式需要更多的时间和精力:在设计过程中需要了解和运用不同的设计模式,需要更多的时间和精力。

  • 部分模式不适用所有情况:设计模式并不能解决所有问题,有些情况下可能并不适合使用某些模式。

例如,单例模式是一种创建型模式,它可以确保一个类只有一个实例,并提供了一个全局访问点。在Java编程中,我们经常需要使用单例模式来确保系统中的某些对象只有一个实例,如线程池、数据库连接池等。

又如,策略模式是一种行为型模式,它定义了一系列算法,并将每个算法都封装起来,使它们可以互换。在Java编程中,我们经常需要使用策略模式来处理对象的某些算法,如排序算法、加密算法等。

什么时候需要用设计模式?什么时候不应该用设计模式?

需要使用设计模式的情况

  1. 当我们需要解决多变的业务需求,但是希望代码的可维护性和可扩展性更强时,可以考虑使用设计模式。

  2. 当我们需要在多人协作开发项目时,希望代码风格更加统一,可读性更强,可以使用常见的设计模式,提供一定的规范和指导。

  3. 当我们想使用一个经过验证的解决方案,而不是从头开始重构一个方案时,可以考虑使用设计模式。

不应该使用设计模式的情况*:

  1. 当项目规模较小时,没有多变的业务需求,代码风格和维护性不是非常关键,可以不使用设计模式。

  2. 当我们想保持代码的简单性和易于理解时,使用过多的设计模式可能会使代码变得过于复杂。

  3. 当我们本身不熟悉设计模式或者在具体业务上难以使用设计模式时,不应该强行使用。

设计模式有哪些分类?

设计模式可以分为三大类:

  • 创建型模式(Creational Patterns):用于处理对象创建过程中的问题,确保对象被正确地创建,并且能够通过合适的方式被访问。创建型模式有单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。

  • 结构型模式(Structural Patterns):用于处理对象间的组合,使得程序结构更加清晰、简单,同时降低了代码的耦合度。结构型模式有适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

  • 行为型模式(Behavioral Patterns):用于处理对象间的职责的分配及消息传递,并确定如何在不同的场景下使用对象。行为型模式有责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。


全部评论: 0

    我有话说:

    目录