首页 > 其他分享 >三:为什么学习设计模式很重要?

三:为什么学习设计模式很重要?

时间:2023-04-30 14:10:30浏览次数:29  
标签:为什么 代码 void class 学习 Override 设计模式 public

学习设计模式就像是掌握了编程界的绝世武功,让你在编程江湖中如虎添翼,所向披靡。那么,为什么学习设计模式如此重要呢? 接下来,我们用生动幽默的方式来探讨一下,并带上一些Java代码示例。

1、驾驭狂野的代码丛林

想象一下,你站在一片狂野的代码丛林前,想要找到前进的道路。而设计模式就是那把砍开迷雾的利剑,帮助你在程序的世界里找到清晰的道路。 例如,使用工厂模式,你可以将对象的创建过程与具体类解耦,让代码更加灵活:

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 class ShapeFactory {
    public Shape createShape(String shapeType) {
        if ("circle".equalsIgnoreCase(shapeType)) {
            return new Circle();
        } else if ("square".equalsIgnoreCase(shapeType)) {
            return new Square();
        }
        return null;
    }
}

2、掌握编程阵法,锻炼代码筋骨

学习设计模式就像是学会了一套编程阵法,让你在编程世界中更加游刃有余。掌握了这些阵法,你的代码将更加健壮,逻辑清晰,方便维护。 例如,使用策略模式,你可以根据不同情境灵活切换算法:

public interface SortingStrategy {
    void sort(int[] arr);
}

public class BubbleSort implements SortingStrategy {
    @Override
    public void sort(int[] arr) {
        // Bubble sort algorithm
    }
}

public class QuickSort implements SortingStrategy {
    @Override
    public void sort(int[] arr) {
        // Quick sort algorithm
    }
}

public class SortingContext {
    private SortingStrategy strategy;

    public void setStrategy(SortingStrategy strategy) {
        this.strategy = strategy;
    }

    public void sort(int[] arr) {
        strategy.sort(arr);
    }
}

3、编程江湖中的招牌招式

设计模式就像是编程江湖中的招牌招式,不仅让你的代码变得高效且可靠,还让你在同行面前独占鳌头,名声大噪。 例如,使用单例模式,确保一个类只有一个实例,并提供全局访问点:

public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
return instance;
    }
}

4、建立起“代码星际联盟”

设计模式让你的代码组件相互协作,就像星际联盟中的各个星球一样。通过学习设计模式,你可以实现代码组件间的高度解耦和协同,让你的应用变得更加稳定和可扩展。 例如,使用观察者模式,你可以在对象之间建立一对多的依赖关系,当一个对象的状态发生改变时,其依赖者会自动更新:

public interface Observer {
    void update();
}

public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers();
}

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

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

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

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

5、开启编程领域的“奇幻之旅”

设计模式就像是一本神奇的魔法书,教会你如何在编程领域里进行奇幻之旅。你将能够探索各种神奇的编程技巧,不断提升自己的技能,让你的代码更具魅力。 例如,使用组合模式,可以将对象组合成树形结构以表示部分整体的层次关系,并允许对单个对象和组合对象进行一致的操作:

public abstract class Component {
    public void add(Component component) {
        throw new UnsupportedOperationException();
    }

    public void remove(Component component) {
        throw new UnsupportedOperationException();
    }

    public Component getChild(int index) {
        throw new UnsupportedOperationException();
    }

    public void operation() {
        throw new UnsupportedOperationException();
    }
}

public class Composite extends Component {
    private List<Component> children = new ArrayList<>();

    @Override
    public void add(Component component) {
        children.add(component);
    }

    @Override
    public void remove(Component component) {
        children.remove(component);
    }

    @Override
    public Component getChild(int index) {
        return children.get(index);
    }

    @Override
    public void operation() {
        for (Component child : children) {
            child.operation();
        }
    }
}

public class Leaf extends Component {
    @Override
    public void operation() {
        System.out.println("Performing operation on leaf!");
    }
}

6、总结

学习设计模式的重要性在于,它们提供了编程领域的经验和最佳实践,帮助你提高代码质量、可读性和可维护性。当你掌握了设计模式,你将能够在编程世界中游刃有余,驰骋疆场,成为一名真正的编程高手。 如果你不会设计模式,不能将设计模式如鱼得水地应用到开发中,你大概只能当当武林中的小喽啰。 那么你写的代码可能就是下面这样的,这个代码用于创建和打印不同形状的图形,但是它混合了各种逻辑,使得代码难以阅读和维护。

public class BadShapeExample {
    public static void main(String[] args) {
        String shapeType = "circle";
        int radius = 5;
        int width = 10;
        int height = 20;

        if ("circle".equalsIgnoreCase(shapeType)) {
            double area = Math.PI * radius * radius;
            System.out.println("The area of the circle is: " + area);
            System.out.println("Drawing a circle with radius " + radius + "...");
        } else if ("rectangle".equalsIgnoreCase(shapeType)) {
            int area = width * height;
            System.out.println("The area of the rectangle is: " + area);
            System.out.println("Drawing a rectangle with width " + width + " and height " + height + "...");
        } else {
            System.out.println("Unknown shape type: " + shapeType);
        }
    }
}

这段代码存在以下这些问题: 1、混合了创建和打印图形的逻辑,使得代码难以阅读和修改。 2、如果需要添加新的形状类型,需要修改多处代码,不符合开闭原则。 3、没有使用面向对象的特性,如继承和多态,导致代码重复和耦合度高。 4、通过学习并应用设计模式,你可以将这段糟糕的代码进行重构,提高其可读性、可维护性和可扩展性。

标签:为什么,代码,void,class,学习,Override,设计模式,public
From: https://blog.51cto.com/u_13616584/6237834

相关文章

  • 四:轻松学设计模式:创建型、结构型、行为型概览
    在软件开发的世界中,有一个众所周知的词汇——设计模式。设计模式是一种解决特定问题的优雅方案,代码让人看起来就有种自然的感觉。现在,我们就来轻松、幽默地了解一下这些神秘的设计模式吧!创建型(Creational):生孩子还是领养?这里有五种方法!1、单例模式(Singleton):只要一个宝贝!想象一下,......
  • 五:设计模式哲学:六大原则
    设计模式是软件开发中的经典解决方案,指导我们如何设计更优雅、灵活和可维护的代码。为了理解设计模式的核心思想,让我们从这六大原则出发,看看它们如何应用于日常编程中。在这篇文章中,我将为你揭示这些原则的精髓,并通过幽默、有趣的例子和Java代码来展示它们的应用。1、单一职责原则......
  • 软构笔记-Java Swing学习
    JavaSwing教程JavaSwing是Java平台的一个GUI工具包,提供了各种组件和工具类,用于创建漂亮的用户界面。安装JavaSwingJavaSwing是Java标准库的一部分,因此无需安装额外的软件包。只需要安装Java开发工具包(JDK),就可以开始使用JavaSwing开发GUI应用程序了。创建......
  • CSC246/446机器学习
    CSC246/446MachineLearningHomework5:ClusteringObjectiveYouaregiventwokindsofdataset.DatasetsA,B,C,andZwerecreatedbytheinstructorbysamplingfromfourdifferentGaussianmixtures,withdifferentnumbersofmixturecomponents.Yourfi......
  • 学习清单
    数据分析WesMcKinney编写了《利用Python进行数据分析》CathyO'Neill和RachelSchutt的《数据科学实战》AllenDowney的《统计思维:程序员数学之概率统计(第2版)》Python开发LucianoRamalho的《流畅的Python》 由HaroldAbelson和GeraldJaySussman编写(MIT出......
  • ActiveMQ学习(四)——应用程序接口…
    在Java里有JMS的多个实现。其中apache下的ActiveMQ用ActiveMQ最好还是了解下JMSJMS公共点对点域发布/订阅域ConnectionFactoryQueueConnectionFactoryTopicConnectionFactoryConnectionQueueConnectionTopicConnectionDestinationQueueTopicSessionQueueSessionTopicSes......
  • CS231N assignment 3 _ GAN 学习笔记 & 解析
    这篇文章之所以来的比较早,是因为我们机器人比赛字符识别数据集不够,想自己造点数据集其实课程内容总结所谓GAN,原理很简单,我们有一个生成器网络和鉴别器网络,生成器生成假的数据,鉴别器分辨真假,二者知己知彼互相优化自己,从而达到博弈的效果.实际操作中,我们一般是......
  • 「学习笔记」tarjan求最近公共祖先
    Tarjan算法是一种离线算法,需要使用并查集记录某个结点的祖先结点。并没有传说中的那么快。过程将询问都记录下来,将它们建成正向边和反向边。在dfs的过程中,给走过的节点打上标记,同时维护并查集,这里利用了回溯的思想,如果\(u\)节点的这棵子树没搜完,那么fa[u]=u;,搜完后......
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介模板方法模式(TemplateMethodPattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法,从而对剩余的逻辑有......
  • Vim学习笔记
     在Linux终端命令行输入gvim&打开GVIMVim打开文件终端输入:gvim***或gvim***&使用Vim独立打开文件vim***在终端显示文件&:表示当前的这个进程打开,但是它还不影响你接下来在terminal上面敲一些其他的一些命令Vim实现比较文件代码终端输入:gvimdifffileafileb或者......