2025-09-28
C#
00

摘要

建造者模式(Builder Pattern)是一种对象构造模式,它可以将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式是为了将构建复杂对象的过程和部件解耦,提供更好的代码复用性。

正文

应用场景

建造者模式常用于以下场景:

  1. 需要生成的对象具有复杂的内部结构。
  2. 需要生成的对象内部属性相互依赖。
  3. 希望在构造过程中隐藏细节,只暴露构造过程和构造结果。

优势与劣势

优势:

  1. 封装性好,构建和表示分离。
  2. 扩展性好,各部分可以独立扩展。
  3. 精细控制构造过程,可以逐步构建对象。

劣势:

  1. 产生多余的Builder对象和Director对象,消耗内存。
  2. 对象的构建过程暴露。
2025-09-28
C#
00

摘要

抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在编程中,抽象工厂用于处理大量相关的依赖关系,而不需要指定它们具体的类。

正文

应用场景

抽象工厂模式通常适用于以下场景:

  • 当一个类需要其子类来指定创建对象时。
  • 当一个类希望由其子类来实现它的实例。
  • 当一个类不能预见它需要创建哪种类的对象。

优势与劣势

优势

  • 抽象工厂模式可以确保一个应用使用同一套产品,这使得产品之间的互操作性得以实现。
  • 抽象工厂模式可以避免客户端与具体产品类的耦合。
  • 你可以从具体工厂类中提取出其公共的代码。

劣势

  • 由于使用了大量的类和接口,代码可能会变得比较复杂。
  • 在产品族中增加新的产品是很困难的,它需要修改抽象工厂和所有的子工厂。
2025-09-28
C#
00

摘要

单例模式是一种用于限制一个类只能创建一个对象的设计模式。在C#中,我们通过将类的构造函数设置为私有,然后通过一个公有的静态方法来获取类的唯一实例,以此来实现单例模式。

正文

单例模式的应用场景

单例模式通常用于那些系统中只需要一个实例的场景,例如:

  • 用于访问资源的类,例如文件系统、打印机等。
  • 用于保存系统的状态的类,例如系统的配置信息。
  • 用于提供服务的类,例如线程池、缓存等。

例子1:日志管理器

在许多应用中,我们需要一个全局的日志管理器来记录应用的运行情况。这个日志管理器只需要一个实例,我们可以使用单例模式来实现。

2025-09-27
C#
00

在这篇文章中,我们将探讨如何使用 TcpListener 在 C# 中实现一个简单的多用户服务器。通过一个实际例子,我们会了解 TcpListener 的常用属性和方法,并且我们将创建一个基本的服务器应用,可以监听客户端连接和处理客户端消息。

什么是 TcpListener?

TcpListener 是 .NET 提供的一个用于监听 TCP 网络连接的类。它能侦听传入的客户端连接请求,并与这些客户端通信。

TcpListener 常用方法

方法

  • Start(): 启动 TcpListener 以准备侦听传入的连接请求。
  • Stop(): 关闭 TcpListener
  • AcceptTcpClient(): 阻塞并等待传入连接尝试。
  • AcceptTcpClientAsync(): 异步等待并接受一个传入的连接尝试。
  • BeginAcceptTcpClient(): 异步地开始传入连接尝试的操作,并选择回调方法来处理它。
  • EndAcceptTcpClient(): 结束异步客户端连接尝试。

界面

image.png

2025-09-27
C#
00

在这篇文章中,我们将探讨如何使用 C# 中的 TcpClient 类来创建一个简单的客户端应用程序。这个示例程序可以连接到服务器,发送消息,并接收服务器的响应。我们将详细讨论 TcpClient 的主要属性和方法,并提供一个带有详细注释的示例代码。

TcpClient 类简介

TcpClient 类提供了简单的方法来连接到 TCP 网络服务。通过 TcpClient,我们可以与服务器建立连接,发送和接收数据。该类封装了 TCP 连接的创建和管理,简化了与服务器进行网络通信的过程。

主要方法

  • Connect(string hostname, int port): 连接到指定主机名和端口号的远程主机。
  • Connect(IPAddress[] ipAddresses, int port): 连接到指定 IP 地址数组和端口号的远程主机。
  • GetStream(): 获取用于发送和接收数据的网络流。
  • Close(): 关闭 TcpClient 并释放所有资源。

界面设计

image.png