首页 > 其他分享 >设计模式

设计模式

时间:2023-04-28 10:34:45浏览次数:28  
标签:代码 实现 void 模块 Tom 设计模式 public

第一章 软件架构设计原则

1.1 开闭原则

开闭原则的核心思想就是面向抽象编程

开闭原则是面向对象编程中的一个设计原则,也被称为OCP原则。它的定义为:软件中的对象(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。

这个原则的目的是降低代码的耦合性,提高代码的可维护性和可扩展性。如果一个系统的每个模块都遵循开闭原则,那么当需要修改系统的某个功能时,我们只需要扩展那个模块,而不需要修改已有的代码。这样可以避免引入新的 bug,同时也可以减少代码的测试和维护成本。

具体来说,开闭原则的实现方法包括:

  • 抽象化关键模块,通过接口或抽象类来定义模块的行为,实现模块与模块之间的松耦合;
  • 封装变化,将变化隔离在模块内部,通过扩展来实现变化;
  • 依赖倒置,面向接口编程,依赖于抽象而不是具体实现,提高系统的灵活性和扩展性。

java 中service ServiceImpl就采用了这种思想

//举例来说,假设我们要设计一个食品配送系统,其中有一个关键模块是订单管理模块。我们可以通过抽象化这个模块来实现开闭原则。
public interface OrderManager {
    public void createOrder(Order order);
    public void cancelOrder(String orderId);
    public Order getOrderById(String orderId);
}
//然后,我们可以实现这个接口来创建具体的订单管理模块
public class SimpleOrderManager implements OrderManager {
    public void createOrder(Order order) {
        // 实现创建订单的逻辑
    }

    public void cancelOrder(String orderId) {
        // 实现取消订单的逻辑
    }

    public Order getOrderById(String orderId) {
        // 实现根据订单编号查询订单的逻辑
    }
}
//在这个例子中,我们通过抽象化OrderManager模块,定义了它的行为,并实现了一个具体的订单管理模块SimpleOrderManager。如果我们需要扩展这个模块,比如增加一个新的功能来查询订单的历史记录,我们只需要扩展OrderManager接口,或者创建一个新的实现类来实现这个功能,而不需要修改已有的代码,从而实现了开闭原则。

在实践中,开闭原则是一个重要的设计原则,可以帮助我们编写高质量、易于维护和扩展的代码。

1.2 依赖倒置原则

依赖倒置的中心思想: 面向接口编程

高层模块

在面向对象设计中,高层模块是指那些实现系统业务逻辑、提供业务接口的模块。高层模块通常是系统中的主要功能模块,对于整个系统的运行起到了至关重要的作用,同时也是与用户交互最密切的部分。

低层模块

依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。

在面向对象设计中,底层模块是指那些提供基础支持、通用功能或技术实现的模块。底层模块通常是系统中的基础设施模块,为高层模块提供了必要的支持,但本身不直接参与业务逻辑的实现。

通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。

接下来看一个案例,还是以 Course(课程)为例,先来创建一个类Tom:

public class Tom{
    public void studyJavaCourse(){
        System.out.println("Tom在学习Java的课程");
    }
    public void studyPythonCourse(){
        System.out.println("Tom在学习Python的课程");
    }
}

来调用一下

public static void main(String[] args){
    Tom tom = new Tom();
    tom.studyJavaCourse();
    tom.studyPythonCourse();
}

Tom热爱学习,目前正在学习Java课程和Python课程。大家都知道,学习也是会上瘾的。随着学习兴趣的“暴涨”,现在Tom还想学习AI(人工智能)的课程。这时候,因为业务扩展,要从低层到高层(调用层)依次修改代码。在Tom类中增加studyAICourse()方法,在高层也要追加调用。如此一来,系统发布以后,实际上是非常不稳定的,在修改代码的同时也会带来意想不到的风险。接下来我们优化代码,创建一个课程的抽象ICourse接口:

public interface ICourse{
    void study();
}

然后编写JavaCourse类:

public class JavaCourse implements ICourse{
    @Override
    public void stury(){
        System.out.println("Tom在学习Java课程");
    }
}

再实现PythonCourse类:

public class PythonCourse implements ICourse{
    @Override
    public void stury(){
        System.out.println("Tom在学习Python课程");
    }
}

修改Tom类:

public class Tom{
    public void study(ICourse icourse){
        icourse.stydy();
    }
}

标签:代码,实现,void,模块,Tom,设计模式,public
From: https://www.cnblogs.com/cxpress/p/17359271.html

相关文章

  • 【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介策略模式(StrategyPattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。当你想使用对象中各种不同的算法变体,使用if...else所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅在执行某些行为时......
  • 设计模式-工厂篇(1)
    意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类。适用性:当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且......
  • python的设计模式
    设计模式目录设计模式一、什么是设计模式二、python实现设计模式创建型模式1.单例模式2.工厂模式一、什么是设计模式软件工程中,设计模式是指软件设计问题的推荐方案。设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。需要记住一点:设计模式是高层次的方案,并......
  • Java设计模式-抽象工厂模式
    简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关的......
  • 设计模式小结
    简单工厂模式将具有相同属性事物用一个抽象基类,里面具有抽象方法来作为父类,然后其他子类通过继承来实现这个基类,通过重写实现基类里面的抽象方法创建一个工厂方法,通过父类变量来策略模式就是在简单工厂模式的基础上,将工厂方法改成策略对象,然后去调用该对象的重写基类的抽象方法单一......
  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现
    简介单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程......
  • 【Java设计模式】装饰者设计模式
    目录1.装饰者模式(Wrapper)概念2.装饰者是什么?3.装饰者设计模式-参与者3.1组成3.1Demo1.Component(抽象构件)2.ConcreteComponent(具体构件)3.Decorator(抽象装饰类)4.ConcreteDecorator(具体装饰类)5.Test类:3.2总结4.JDK源码中的装饰者设计模式扩展:开闭原则1.装饰者模式(Wra......
  • 设计模式(18)-Command Pattern
    一、 命令(Command)模式命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。......
  • 设计模式
    总体设计模式分为三大类:创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共7种:代理模式、桥接模式、适配器模式、装饰器模式、外观模式、享元模式、组合模式。行为型模式,共11种:观察者模式、策略模式、模板方法模式、迭代子模式、责任链......
  • JavaScript设计模式
    JavaScript设计模式设计模式概念经过代码设计经验总结之后设计出的一种固定解决问题的方式设计模式作用代码复用保证代码可靠性将编程工程化更易被他人理解设计模式的分类(W3C平台)构造器模式,模块化模式,暴露模块模式,单例模式,中介者模式,原型模式,命令模式,外......