Java 行为型设计模式一口气讲完!*^____^*

news2024/11/15 19:26:19

Java 责任链模式

Java设计模式 -责任链模式

责任链模式为请求创建一个接收者对象列表。

这种模式是行为模式。

当使用责任链模式时,通常每个接收器包含对另一个接收器的引用。

如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,等等。

例子

abstract class Logger {
   protected Logger nextLogger;

   public void setNextLogger(Logger nextLogger){
      this.nextLogger = nextLogger;
   }

   public void logMessage(String message){
      log(message);
      if(nextLogger !=null){
         nextLogger.logMessage(message);
      }
   }
   abstract protected void log(String message);  
}
class ConsoleLogger extends Logger {
   public ConsoleLogger(){
   }
   @Override
   protected void log(String message) {    
      System.out.println("Console::Logger: " + message);
   }
}
class EMailLogger extends Logger {
   public EMailLogger(){
   }
   @Override
   protected void log(String message) {    
      System.out.println("EMail::Logger: " + message);
   }
}
class FileLogger extends Logger {
   public FileLogger(){
   }
   @Override
   protected void log(String message) {    
      System.out.println("File::Logger: " + message);
   }
}
public class Main {  
   private static Logger getChainOfLoggers(){
      Logger emailLogger = new EMailLogger();
      Logger fileLogger = new FileLogger();
      Logger consoleLogger = new ConsoleLogger();
      emailLogger.setNextLogger(fileLogger);
      fileLogger.setNextLogger(consoleLogger);
      return emailLogger;  
   }
   public static void main(String[] args) {
      Logger loggerChain = getChainOfLoggers();
      loggerChain.logMessage("Null pointer");
      loggerChain.logMessage("Array Index Out of Bound");
      loggerChain.logMessage("Illegal Parameters");
   }
}

上面的代码生成以下结果。

Java 命令模式 

Java设计模式 - 命令模式

命令模式是数据驱动设计模式它是行为模式之一。

请求被作为命令的对象包装传递给invoker对象。

Invoker对象将命令传递到相应的对象并且该对象执行该命令。

例子

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

interface Command {
  void execute();
}

class MouseCursor {
  private int x = 10;
  private int y = 10;
  public void move() {
    System.out.println("Old Position:"+x +":"+y);
    x++;
    y++;
    System.out.println("New Position:"+x +":"+y);
    
  }

  public void reset() {
    System.out.println("reset");
    x = 10;
    y = 10;
  }
}

class MoveCursor implements Command {
  private MouseCursor abcStock;

  public MoveCursor(MouseCursor abcStock) {
    this.abcStock = abcStock;
  }

  public void execute() {
    abcStock.move();
  }
}

class ResetCursor implements Command {
  private MouseCursor abcStock;

  public ResetCursor(MouseCursor abcStock) {
    this.abcStock = abcStock;
  }

  public void execute() {
    abcStock.reset();
  }
}

class MouseCommands {
  private List<Command> orderList = new ArrayList<Command>();

  public void takeOrder(Command order) {
    orderList.add(order);
  }

  public void placeOrders() {
    for (Command order : orderList) {
      order.execute();
    }
    orderList.clear();
  }
}

public class Main {
  public static void main(String[] args) {
    MouseCursor cursor = new MouseCursor();

    MoveCursor moveCursor = new MoveCursor(cursor);
    ResetCursor resetCursor = new ResetCursor(cursor);

    MouseCommands commands= new MouseCommands();
    commands.takeOrder(moveCursor);
    commands.takeOrder(resetCursor);

    commands.placeOrders();
  }
}

上面的代码生成以下结果。

Java 迭代器模式 

Java设计模式 - 迭代器模式

迭代器模式以顺序方式访问集合对象的元素,而不知道其底层表示。

迭代器模式是行为模式之一。

例子

interface Iterator {
   public boolean hasNext();
   public Object next();
}
class LetterBag {
   public String names[] = {"R" , "J" ,"A" , "L"};
   public Iterator getIterator() {
      return new NameIterator();
   }
   class NameIterator implements Iterator {
      int index;
      @Override
      public boolean hasNext() {
         if(index < names.length){
            return true;
         }
         return false;
      }
      @Override
      public Object next() {
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }    
   }
}
public class Main {
   public static void main(String[] args) {
      LetterBag bag = new LetterBag();
      for(Iterator iter = bag.getIterator(); iter.hasNext();){
         String name = (String)iter.next();
         System.out.println("Name : " + name);
      }   
   }
}

上面的代码生成以下结果。

Java 观察者模式 

Java设计模式 - 观察者模式

观察者模式用于在一个对象被修改时通知其相关对象。

观察者模式是一种行为模式类别。

例子

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

class MyValue {
   private List<Observer> observers 
      = new ArrayList<Observer>();
   private int state;

   public int getState() {
      return state;
   }

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

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

   public void notifyAllObservers(){
      for (Observer observer : observers) {
         observer.update();
      }
   }   
}
abstract class Observer {
   protected MyValue subject;
   public abstract void update();
}
class PrinterObserver extends Observer{
   public PrinterObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println("Printer: " + subject.getState() ); 
   }
}
class EmailObserver extends Observer{

   public EmailObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
     System.out.println("Email: "+ subject.getState() ); 
   }
}
class FileObserver extends Observer{

   public FileObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println("File: " + subject.getState()); 
   }
}

public class Main {
   public static void main(String[] args) {
      MyValue subject = new MyValue();

      new FileObserver(subject);
      new EmailObserver(subject);
      new PrinterObserver(subject);

      subject.setState(15);
  
      subject.setState(10);
   }
}

上面的代码生成以下结果。

Java 中介者模式 

Java设计模式 - 中介者模式

中介者模式减少多个对象之间的通信。

此模式提供了一个处理不同类之间的所有通信的中介类。

中介者模式属于行为模式类别。

例子

class Printer {
   public static void showMessage(Machine user, String message){
      System.out.println(new java.util.Date().toString()
         + " [" + user.getName() +"] : " + message);
   }
}
class Machine {
   private String name;

   public Machine(String name){
      this.name  = name;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void sendMessage(String message){
      Printer.showMessage(this,message);
   }
}
class Main {
   public static void main(String[] args) {
      Machine m1= new Machine("M1");
      Machine m2 = new Machine("M2");

      m1.sendMessage("Rebooting");
      m2.sendMessage("Computing");
   }
}

Java 解释器模式 

Java设计模式 - 解释器模式

我们通常使用解释器模式来评估语言语法或表达。

这种类型的模式是行为模式之一。

例子

interface Expression {
  public boolean evaluate(String context);
}

class IsInExpression implements Expression {
  private String data;

  public IsInExpression(String data) {
    this.data = data;
  }

  @Override
  public boolean evaluate(String context) {
    if (context.contains(data)) {
      return true;
    }
    return false;
  }
}

class OrExpression implements Expression {

  private Expression expr1 = null;
  private Expression expr2 = null;

  public OrExpression(Expression expr1, Expression expr2) {
    this.expr1 = expr1;
    this.expr2 = expr2;
  }

  @Override
  public boolean evaluate(String context) {
    return expr1.evaluate(context) || expr2.evaluate(context);
  }
}

class AndExpression implements Expression {

  private Expression expr1 = null;
  private Expression expr2 = null;

  public AndExpression(Expression expr1, Expression expr2) {
    this.expr1 = expr1;
    this.expr2 = expr2;
  }

  @Override
  public boolean evaluate(String context) {
    return expr1.evaluate(context) && expr2.evaluate(context);
  }
}

public class Main {

  public static void main(String[] args) {
    Expression select = new IsInExpression("Select");
    Expression from = new IsInExpression("From");
    Expression isSelectFrom = new AndExpression(select, from);

    Expression insert = new IsInExpression("Insert");
    Expression update = new IsInExpression("Update");
    Expression isInsertOrUpdate = new OrExpression(insert, update);

    System.out.println(isSelectFrom.evaluate("Select"));
    System.out.println(isInsertOrUpdate.evaluate("Insert"));

    System.out.println(isSelectFrom.evaluate("Select From"));
    System.out.println(isInsertOrUpdate.evaluate("Update"));
  }
}

上面的代码生成以下结果。

Java 状态模式 

Java设计模式 - 状态模式

在状态模式中,类行为基于其状态而改变。

状态模式是一种行为模式。

当使用状态模式时,我们创建各种状态对象和上下文对象,其行为随着其状态对象改变而变化。

例子

interface State {
  public void doAction(Context context);
}

class StartState implements State {
  public void doAction(Context context) {
    System.out.println("In start state");
    context.setState(this);
  }

  public String toString() {
    return "Start State";
  }
}

class StopState implements State {

  public void doAction(Context context) {
    System.out.println("In stop state");
    context.setState(this);
  }

  public String toString() {
    return "Stop State";
  }
}

class PlayState implements State {
  public void doAction(Context context) {
    System.out.println("In play state");
    context.setState(this);  
  }
  public String toString() {
    return "Play State";
  }
}

class Context {
  private State state;

  public Context() {
    state = null;
  }

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

  public State getState() {
    return state;
  }
}

public class Main {
  public static void main(String[] args) {
    Context context = new Context();

    StartState startState = new StartState();
    startState.doAction(context);

    System.out.println(context.getState().toString());

    PlayState playState = new PlayState();
    playState.doAction(context);
    
    StopState stopState = new StopState();
    stopState.doAction(context);

    System.out.println(context.getState().toString());
  }
}

上面的代码生成以下结果。

Java 空对象模式 

Java设计模式 - 空对象模式

在空对象模式中,创建一个无业务对象,包括 null 对象。

我们使用无业务对象来替换空指针检查。

我们称之为一个无业务的对象Null对象。

Null对象在数据不可用时提供默认行为。

在空对象模式中,我们通常创建一个抽象类来指定各种操作。

Null Object和具体类都将扩展这个抽象类。

Null Object类只提供空逻辑。

例子

abstract class AbstractEmployee {
   protected String name;
   public abstract boolean isNull();
   public abstract String getName();
}
class Programmer extends AbstractEmployee {
   public Programmer(String name) {
      this.name = name;    
   }
   @Override
   public String getName() {
      return name;
   }
   @Override
   public boolean isNull() {
      return false;
   }
}
class NullCustomer extends AbstractEmployee {
   @Override
   public String getName() {
      return "Not Available";
   }

   @Override
   public boolean isNull() {
      return true;
   }
}
class EmployeeFactory {
   public static final String[] names = {"Rob", "Joe", "Jack"};
   public static AbstractEmployee getCustomer(String name){
      for (int i = 0; i < names.length; i++) {
         if (names[i].equalsIgnoreCase(name)){
            return new Programmer(name);
         }
      }
      return new NullCustomer();
   }
}
public class Main {
   public static void main(String[] args) {

      AbstractEmployee emp = EmployeeFactory.getCustomer("Rob");
      AbstractEmployee emp2 = EmployeeFactory.getCustomer("Bob");
      AbstractEmployee emp3 = EmployeeFactory.getCustomer("Jack");
      AbstractEmployee emp4 = EmployeeFactory.getCustomer("Tom");

      System.out.println(emp.getName());
      System.out.println(emp2.getName());
      System.out.println(emp3.getName());
      System.out.println(emp4.getName());
   }
}

上面的代码生成以下结果。

Java 策略模式 

 Java设计模式 - 战略模式

在策略模式中,可以在运行时更改算法。

策略模式是一种行为模式。

在策略模式中,我们创建表示各种算法的对象和运行算法的上下文对象。

策略对象更改上下文对象上的算法。

例子

interface MathAlgorithm {
   public int calculate(int num1, int num2);
}
class MathAdd implements MathAlgorithm{
   @Override
   public int calculate(int num1, int num2) {
      return num1 + num2;
   }
}
class MathSubstract implements MathAlgorithm{
   @Override
   public int calculate(int num1, int num2) {
      return num1 - num2;
   }
}
class MathMultiply implements MathAlgorithm{
   @Override
   public int calculate(int num1, int num2) {
      return num1 * num2;
   }
}
class MathContext {
   private MathAlgorithm algorithm;

   public MathContext(MathAlgorithm strategy){
      this.algorithm = strategy;
   }

   public int execute(int num1, int num2){
      return algorithm.calculate(num1, num2);
   }
}
public class Main {
   public static void main(String[] args) {
      MathContext context = new MathContext(new MathAdd());    
      System.out.println("10 + 5 = " + context.execute(10, 5));

      context = new MathContext(new MathSubstract());    
      System.out.println("10 - 5 = " + context.execute(10, 5));

      context = new MathContext(new MathMultiply());    
      System.out.println("10 * 5 = " + context.execute(10, 5));
   }
}

上面的代码生成以下结果。

Java 模板方法模式 

Java设计模式 - 模板方法模式

在模板模式中,父抽象类公开几个抽象方法供子类实现。在父抽象类中有另一个方法或几个方法使用抽象方法来实现业务逻辑。

抽象方法通常用于父类所需的每个步骤。

例如,为了使用新的软件,我们需要下载,安装,配置和运行。如果我们要使用模板模式来编码逻辑,我们将创建一个父类如下。

abstract class UseSoftware{
   abstract void download();
   abstract void install();
   abstract void configuration();
   abstract void run();
   
   public void useNewSoftware(){
     download();
     install();
     configuration();
     run();   
   }
}

对于使用不同的软件,我们只需要从上面的抽象类继承并提供详细的实现。

模板模式是一种行为模式。

例子

abstract class Software {
   abstract void initialize();
   abstract void start();
   abstract void end();
   //template method
   public final void play(){
      //initialize
      initialize();
      //start
      start();
      //end
      end();
   }
}
class Browser extends Software {
   @Override
   void end() {
      System.out.println("Browser Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Browser Initialized!.");
   }

   @Override
   void start() {
      System.out.println("Browser Started.");
   }
}
class Editor extends Software {

   @Override
   void end() {
      System.out.println("Editor Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Editor Initialized!");
   }

   @Override
   void start() {
      System.out.println("Editor Started!");
   }
}
public class Main {
   public static void main(String[] args) {
      Software s1 = new Browser();
      s1.play();
      s1 = new Editor();
      s1.play();    
   }
}

上面的代码生成以下结果。

Java 访问者模式

Java设计模式 - 访问者模式

在访问者模式中,元素对象接受访问者对象,而访问者对象处理元素对象上的操作。

此模式是一种行为模式。

通过这种方式,可以从不同的访问者改变元素的执行算法。

例子

class TreeNode {
  private String name;
  public TreeNode(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
  public void accept(NodeVisitor v) {
    v.visit(this);
  }
}
interface NodeVisitor {
  public void visit(TreeNode n);
}
class ConsoleVisitor implements NodeVisitor {
  @Override
  public void visit(TreeNode n) {
    System.out.println("console:" + n.getName());
  }
}

class EmailVisitor implements NodeVisitor {
  @Override
  public void visit(TreeNode n) {
    System.out.println("email:" + n.getName());
  }
}

public class Main {
  public static void main(String[] args) {

    TreeNode computer = new TreeNode("w3cschool.cn");
    computer.accept(new ConsoleVisitor());
    computer.accept(new EmailVisitor());
  }
}

上面的代码生成以下结果。

console:w3cschool.cn

email:w3cschool.cn

Java MVC模式

Java设计模式 - MVC模式

MVC 模式表示模型 - 视图 - 控制器模式。

从名称我们可以看到,MVC模式涉及三个部分:

  • Model(模型- 模型表示携带数据的对象。它也可以具有逻辑来更新控制器,如果其数据改变。

  • View(视图- 视图表示模型包含的数据的可视化。通常它有UI逻辑。

  • Controller(控制器 - 控制器引用模型和视图。它控制数据流进入模型对象,并在数据更改时更新视图。它保持视图和模型分开。

例子

class Employee {
  private String id;
  private String name;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

class EmployeeView {
  public void printEmployeeDetails(String name, String no) {
    System.out.println("Employee: ");
    System.out.println("Name: " + name);
    System.out.println("ID: " + no);
  }
}

class EmployeeController {
  private Employee model;
  private EmployeeView view;

  public EmployeeController(Employee model, EmployeeView view) {
    this.model = model;
    this.view = view;
  }

  public void setEmployeeName(String name) {
    model.setName(name);
  }

  public String getEmployeeName() {
    return model.getName();
  }

  public void setEmployeeId(String rollNo) {
    model.setId(rollNo);
  }

  public String getEmployeeId() {
    return model.getId();
  }

  public void updateView() {
    view.printEmployeeDetails(model.getName(), model.getId());
  }
}

public class Main {
  public static void main(String[] args) {
    Employee model = new Employee();
    model.setName("Tom");
    model.setId("1");
    EmployeeView view = new EmployeeView();

    EmployeeController controller = new EmployeeController(model, view);
    controller.updateView();
    controller.setEmployeeName("New Name");
    controller.updateView();
  }
}

上面的代码生成以下结果。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue的路由

v2用3版本&#xff0c;v3用4版本 import Vue from vue import VueRouter from vue-router Vue.use(VueRouter) const routes [] const router new VueRouter({ routes }) export default router import Vue from vue import App from ./App.vue import router from /router V…

【漏洞复现】科荣AIO moffice Sql注入漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

应用案例分享 | 智驾路试数据分析及 SiL/HiL 回灌案例介绍

概述 为有效利用海量的路试数据并发挥其价值&#xff0c;经纬恒润推出了OrienLink路试数据分析及开环/闭环回灌测试系统。该系统采用统一的数据存储标准平台&#xff0c;基于云计算技术提供的大规模存储、高带宽和高算力&#xff0c;能够对路试数据进行深入的场景挖掘。通过软件…

AI小项目4-用Pytorch从头实现Transformer(详细注解)

目录 一、前期准备工作学习如何读AI论文读Transformer原始论文用Pytorch从头实现Transformer 二、我的完整代码实现1.导入库2.基本组件创建词嵌入位置嵌入自注意力 3.编码器4.解码器5.完整架构6.简单测试一下代码创建模型和准备简单的训练数据训练一次&#xff08;前向传播&…

用Python实现时间序列模型实战——Day 20: 时间序列预测的综合练习

一、学习内容 在本节中&#xff0c;我们将综合应用前几周学习的时间序列分析与预测方法&#xff0c;完成一个完整的时间序列预测项目&#xff0c;包含从数据预处理、异常检测、模型选择、预测到评估的全流程。项目流程&#xff1a; 1. 数据获取与预处理 数据加载&#xff0c…

023.PL-SQL进阶—视图

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

跨越日语障碍2024轻松实现日语阅读的好帮手

不知道你喜欢看日本小说吗&#xff0c;之前的东野奎吾还有不少日本作家的书籍&#xff0c;如果想看一手的书籍那就只能看日语版本的啦。但是因为语言的问题日语不是很好的小伙伴阅读起来就有一定的难度。今天我就介绍几个日语翻译工具来解决这个问题咯。 1.福昕在线翻译 链接…

简单了解 JVM

目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机。 虚拟机是指通过软件模…

网络安全培训班有用吗

在当今数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;成为了全球关注的焦点。随着网络攻击的不断升级和复杂化&#xff0c;越来越多的人开始关注网络安全&#xff0c;并考虑参加网络安全培训班来提升自己的技能。那么&#xff0c;网络安全培训班到底有用吗? 一、网络…

如何彻底清除电脑上的数据?保护你的隐私安全

随着科技的飞速发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;当我们需要更换电脑、出售旧电脑或处理废旧电脑时&#xff0c;如何彻底清除电脑上的数据成为了一个重要的问题。本文将详细介绍几种彻底清除电脑数据的方法&#xff0c;以确保…

无人机应用新纪元:图形工作站配置推荐与硬件解析

低空经济作为国家新兴的战略性产业&#xff0c;正逐步成为经济高质量发展的新动力。据统计&#xff0c;2023年中国低空经济规模达到5059.5亿元&#xff0c;增速为33.8%&#xff0c;预计到2026年有望突破万亿元大关。政府对低空经济的发展高度重视&#xff0c;不仅出台了相关法规…

IPv6路由基础

RIPng RIPng是一种较为简单的内部网关协议&#xff0c;是RIP在IPv6网络中的应用。RIPng主要用于规模较小的网络中&#xff0c;比如校园网以及结构较简单的地区性网络。由于RIPng的实现较为简单&#xff0c;在配置和维护管理方面也远比OSPFv3和IS-IS for IPv6容易&#xff0c;因…

腾讯地图SDK Android版开发 11 覆盖物示例 4 线

腾讯地图SDK Android版开发 11 覆盖物示例 4 线 前言线的属性介绍ColorType 和 LineTypeColorTypeLineType 与颜色有关的属性填充色和线宽描边颜色和描边的宽度分段颜色渐变色擦除颜色 与纹理相关属性内置纹理自定义颜色纹理线上叠加纹理 虚线 界面布局MapPolyline类常量成员变…

【系统架构设计】基于中间件的开发

【系统架构设计】基于中间件的开发 中间件技术J2EE.NET企业应用集成中间件技术 中间件属于可复用软件的范畴,处于操作系统、网络和数据库之上,应用软件的下层。 J2EE J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编程接口确定了 Web 应用…

民间故事推广系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;民族文化管理&#xff0c;节日类型管理&#xff0c;传统节日管理&#xff0c;故事类型管理&#xff0c;民间故事管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首…

基于SpringBoot+Vue+MySQL的IT技术交流和分享平台

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化转型的浪潮中&#xff0c;构建一个基于SpringBoot、Vue.js与MySQL的IT技术交流与分享平台显得尤为重要。该平台旨在汇聚广大IT从业者、开发者及爱好者&#xff0c;提供一个高效、便捷的线上空间&#xff0c;用于分享最新…

7.类的大小

对于C的类而言&#xff0c;类的大小似乎并非完全由用户控制&#xff0c;我们看看如下的代码。 class X {}; class Y : public virtual X{}; class Z : public virtual X{}; class A : public Y, public Z{}; 上述的X,Y,Z,A中没有任何一个class内含有明显的数据&#xff0c;其…

基本开关稳压器(升压结构+降压结构+逆变结构)

2024-9-14&#xff0c;星期六&#xff0c;7:25&#xff0c;天气&#xff1a;多云&#xff0c;心情&#xff1a;晴。明天就就要迎来三天小长假啦&#xff0c;提前祝大家假期快乐&#xff0c;中秋快乐&#xff0c;幸福美满&#xff01; 今天继续第11章的学习&#xff0c;主要学习…

FOTA介绍

0 Preface / Foreword 1 FOTA 1.1 FOTA介绍 FOTA&#xff1a;Firmware Over-the-Air (FOTA) 1.2 如何产生FOTA文件 (generate FOTA package) 第一步&#xff1a;打开FOTA package tool 第二步&#xff1a;选择flash download配置文件 文件名&#xff1a;flash_download.cf…

Python 常用模块(一):csv模块

目录 一、csv文件介绍二、csv模块2.1 csv模块介绍2.2 csv 模块的基本功能2.3 reader()方法——读取csv文件2.4 writer()方法——将数据写入csv文件2.5 DictWriter类——创建支持字典的csv文件2.6 DictReader类——创建字典类型的csv文件对象2.7 几个常用属性说明2.7.1 QUOTE_AL…