请问关于c的具体应用场景有哪些?

更新于
2026-07-26 18:51:29
18阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1408个文字,预计阅读时间需要6分钟。

请问关于c的具体应用场景有哪些?

说明:本书主要参考了《Head First 设计模式(中文版)》一书,通过使用C语言进行实践,深入浅出地讲解了设计模式的基本概念和应用方法。以下内容为该书部分内容的简要改写。

一、设计模式概述

设计模式是软件工程领域的一种最佳实践,它可以帮助开发者解决在软件开发过程中遇到的一些常见问题。设计模式不仅可以帮助我们编写出更加可读、可维护和可扩展的代码,还可以提高我们的编程思维和设计能力。

二、设计模式分类

设计模式主要分为三大类:

1. 创建型模式:主要关注对象的创建过程,包括工厂方法、抽象工厂、单例、建造者、原型等模式。

2. 结构型模式:主要关注类和对象的组合,包括适配器、装饰器、桥接、组合、外观、享元等模式。

3. 行为型模式:主要关注对象间的通信和协作,包括策略、模板方法、观察者、状态、命令、迭代器、访问者等模式。

三、C语言实现设计模式

以下列举几个常用设计模式的C语言实现示例:

1. 单例模式

c#include

typedef struct { int data;} Singleton;

Singleton *getInstance() { static Singleton instance; return &instance;}

int main() { Singleton *s1=getInstance(); Singleton *s2=getInstance();

s1->data=10; printf(s1 data: %d\n, s1->data); printf(s2 data: %d\n, s2->data);

return 0;}

2. 策略模式

c#include

typedef int (*CalculationStrategy)(int, int);

int add(int a, int b) { return a + b;}

int subtract(int a, int b) { return a - b;}

int main() { CalculationStrategy strategy=add; printf(Result: %d\n, strategy(10, 5));

strategy=subtract; printf(Result: %d\n, strategy(10, 5));

return 0;}

以上仅为部分设计模式的C语言实现示例,更多设计模式及实现方法请参考《Head First 设计模式(中文版)》一书。

说明:主要参考《Head First设计模式(中文版)》,使用C#代码实现。

代码:Github

1、观察者模式UML图

2、气象监测类图

请问关于c的具体应用场景有哪些?

3、气象监测代码(书中C#版)

3.1 Observer

public interface IObserver { void Update(float temperature, float humidity, float pressure); }

public interface IDisplayElement { void Display(); }

public class CurrentConditionDisplay : IObserver, IDisplayElement { private readonly ISubject _weatherData; private float _temperature; private float _humidity; public CurrentConditionDisplay(ISubject weatherData) { _weatherData = weatherData; _weatherData?.RegisterObserver(this); } public void Update(float temperature, float humidity, float pressure) { _temperature = temperature; _humidity = humidity; Display(); } public void Display() { Console.WriteLine($"Current Conditions: {_temperature}F degress and {_humidity}% humidity"); } }

3.2Subject

public interface ISubject { void RegisterObserver(IObserver o); void RemoveObserver(IObserver o); void NotifyObservers(); }

public class WeatherData : ISubject { //观察者列表 private readonly List<IObserver> _observerList; //天气数据 private float _temperature; private float _humidity; private float _pressure; public WeatherData() { _observerList = new List<IObserver>(); } /// <summary> /// 订阅观察者 /// </summary> /// <param name="o">观察者对象</param> public void RegisterObserver(IObserver o) { _observerList.Add(o); } /// <summary> /// 移除观察者 /// </summary> /// <param name="o">观察者对象</param> public void RemoveObserver(IObserver o) { if (_observerList.Contains(o)) { _observerList.Remove(o); } } /// <summary> /// 发布数据 /// </summary> public void NotifyObservers() { foreach (var observer in _observerList) { observer.Update(_temperature, _humidity, _pressure); } } /// <summary> /// 数据发生改变 /// </summary> private void MeasurementChanged() { NotifyObservers(); } /// <summary> /// 更新数据 /// </summary> /// <param name="temperature">温度</param> /// <param name="humidity">湿度</param> /// <param name="pressure">气压</param> public void SetMeasurements(float temperature, float humidity, float pressure) { _temperature = temperature; _humidity = humidity; _pressure = pressure; MeasurementChanged(); } }

3.3 测试代码

private static void TestWeatherData() { var weatherData = new WeatherData(); var currentConditionDisplay = new CurrentConditionDisplay(weatherData); weatherData.SetMeasurements(80, 65, 30.4f); weatherData.SetMeasurements(82, 70, 29.2f); weatherData.SetMeasurements(78, 90, 29.2f); }

4、使用C#中IObservable接口实现气象监测

4.1 辅助类/结构体

public struct WeatherMessage { public float Temperature { get; set; } public float Humidity { get; set; } public float Pressure { get; set; } } public class MessageUnknownException : Exception { internal MessageUnknownException() { } }

4.2 IObserver具体实现

class CurrentConditionDisplayX : IObserver<WeatherMessage>, IDisplayElement { private IDisposable _unsubscribe; private float _temperature; private float _humidity; public void Subscribe(IObservable<WeatherMessage> provider) { if (provider != null) { _unsubscribe = provider.Subscribe(this); } } public void Unsubscribe() { _unsubscribe?.Dispose(); _unsubscribe = null; } public void OnCompleted() { Console.WriteLine("CurrentConditionDisplayX: OnCompleted"); Unsubscribe(); } public void OnError(Exception error) { Console.WriteLine("CurrentConditionDisplayX: OnError"); } public void OnNext(WeatherMessage value) { _temperature = value.Temperature; _humidity = value.Humidity; Display(); } public void Display() { Console.WriteLine($"Current Conditions: {_temperature}F degress and {_humidity}% humidity"); } }

4.3IObservable具体实现

public class WeatherDataX : IObservable<WeatherMessage> { private readonly List<IObserver<WeatherMessage>> _observerList; public WeatherDataX() { _observerList = new List<IObserver<WeatherMessage>>(); } /// <summary> /// 通知提供程序:某观察程序将要接收通知。 /// </summary> /// <param name="observer">要接收通知的对象。</param> /// <returns>使资源释放的观察程序的接口。</returns> public IDisposable Subscribe(IObserver<WeatherMessage> observer) { if(!_observerList.Contains(observer)) { _observerList.Add(observer); } return new Unsubcriber(_observerList, observer); } public void SetMeasurements(Nullable<WeatherMessage> message) { foreach (var observer in _observerList) { if (!message.HasValue) { observer.OnError(new MessageUnknownException()); } else { observer.OnNext(message.Value); } } } public void EndTransmission() { foreach (var observer in _observerList.ToArray()) { if (_observerList.Contains(observer)) { observer.OnCompleted(); } } _observerList.Clear(); } private class Unsubcriber : IDisposable { private List<IObserver<WeatherMessage>> _observerList; private IObserver<WeatherMessage> _observer; public Unsubcriber(List<IObserver<WeatherMessage>> observerList, IObserver<WeatherMessage> observer) { _observerList = observerList; _observer = observer; } public void Dispose() { if (_observerList != null && _observerList.Contains(_observer)) { _observerList.Remove(_observer); } } } }

4.4 测试代码

private static void TestWeatherDataX() { var weatherData = new WeatherDataX(); var currentConditionDisplay = new CurrentConditionDisplayX(); currentConditionDisplay.Subscribe(weatherData); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 80, Humidity = 65, Pressure = 30.4f }); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 82, Humidity = 70, Pressure = 29.2f }); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 78, Humidity = 90, Pressure = 29.2f }); weatherData.EndTransmission(); }

以上就是c# 实现观察者模式的详细内容,更多关于c# 观察者模式的资料请关注自由互联其它相关文章!

本文共计1408个文字,预计阅读时间需要6分钟。

请问关于c的具体应用场景有哪些?

说明:本书主要参考了《Head First 设计模式(中文版)》一书,通过使用C语言进行实践,深入浅出地讲解了设计模式的基本概念和应用方法。以下内容为该书部分内容的简要改写。

一、设计模式概述

设计模式是软件工程领域的一种最佳实践,它可以帮助开发者解决在软件开发过程中遇到的一些常见问题。设计模式不仅可以帮助我们编写出更加可读、可维护和可扩展的代码,还可以提高我们的编程思维和设计能力。

二、设计模式分类

设计模式主要分为三大类:

1. 创建型模式:主要关注对象的创建过程,包括工厂方法、抽象工厂、单例、建造者、原型等模式。

2. 结构型模式:主要关注类和对象的组合,包括适配器、装饰器、桥接、组合、外观、享元等模式。

3. 行为型模式:主要关注对象间的通信和协作,包括策略、模板方法、观察者、状态、命令、迭代器、访问者等模式。

三、C语言实现设计模式

以下列举几个常用设计模式的C语言实现示例:

1. 单例模式

c#include

typedef struct { int data;} Singleton;

Singleton *getInstance() { static Singleton instance; return &instance;}

int main() { Singleton *s1=getInstance(); Singleton *s2=getInstance();

s1->data=10; printf(s1 data: %d\n, s1->data); printf(s2 data: %d\n, s2->data);

return 0;}

2. 策略模式

c#include

typedef int (*CalculationStrategy)(int, int);

int add(int a, int b) { return a + b;}

int subtract(int a, int b) { return a - b;}

int main() { CalculationStrategy strategy=add; printf(Result: %d\n, strategy(10, 5));

strategy=subtract; printf(Result: %d\n, strategy(10, 5));

return 0;}

以上仅为部分设计模式的C语言实现示例,更多设计模式及实现方法请参考《Head First 设计模式(中文版)》一书。

说明:主要参考《Head First设计模式(中文版)》,使用C#代码实现。

代码:Github

1、观察者模式UML图

2、气象监测类图

请问关于c的具体应用场景有哪些?

3、气象监测代码(书中C#版)

3.1 Observer

public interface IObserver { void Update(float temperature, float humidity, float pressure); }

public interface IDisplayElement { void Display(); }

public class CurrentConditionDisplay : IObserver, IDisplayElement { private readonly ISubject _weatherData; private float _temperature; private float _humidity; public CurrentConditionDisplay(ISubject weatherData) { _weatherData = weatherData; _weatherData?.RegisterObserver(this); } public void Update(float temperature, float humidity, float pressure) { _temperature = temperature; _humidity = humidity; Display(); } public void Display() { Console.WriteLine($"Current Conditions: {_temperature}F degress and {_humidity}% humidity"); } }

3.2Subject

public interface ISubject { void RegisterObserver(IObserver o); void RemoveObserver(IObserver o); void NotifyObservers(); }

public class WeatherData : ISubject { //观察者列表 private readonly List<IObserver> _observerList; //天气数据 private float _temperature; private float _humidity; private float _pressure; public WeatherData() { _observerList = new List<IObserver>(); } /// <summary> /// 订阅观察者 /// </summary> /// <param name="o">观察者对象</param> public void RegisterObserver(IObserver o) { _observerList.Add(o); } /// <summary> /// 移除观察者 /// </summary> /// <param name="o">观察者对象</param> public void RemoveObserver(IObserver o) { if (_observerList.Contains(o)) { _observerList.Remove(o); } } /// <summary> /// 发布数据 /// </summary> public void NotifyObservers() { foreach (var observer in _observerList) { observer.Update(_temperature, _humidity, _pressure); } } /// <summary> /// 数据发生改变 /// </summary> private void MeasurementChanged() { NotifyObservers(); } /// <summary> /// 更新数据 /// </summary> /// <param name="temperature">温度</param> /// <param name="humidity">湿度</param> /// <param name="pressure">气压</param> public void SetMeasurements(float temperature, float humidity, float pressure) { _temperature = temperature; _humidity = humidity; _pressure = pressure; MeasurementChanged(); } }

3.3 测试代码

private static void TestWeatherData() { var weatherData = new WeatherData(); var currentConditionDisplay = new CurrentConditionDisplay(weatherData); weatherData.SetMeasurements(80, 65, 30.4f); weatherData.SetMeasurements(82, 70, 29.2f); weatherData.SetMeasurements(78, 90, 29.2f); }

4、使用C#中IObservable接口实现气象监测

4.1 辅助类/结构体

public struct WeatherMessage { public float Temperature { get; set; } public float Humidity { get; set; } public float Pressure { get; set; } } public class MessageUnknownException : Exception { internal MessageUnknownException() { } }

4.2 IObserver具体实现

class CurrentConditionDisplayX : IObserver<WeatherMessage>, IDisplayElement { private IDisposable _unsubscribe; private float _temperature; private float _humidity; public void Subscribe(IObservable<WeatherMessage> provider) { if (provider != null) { _unsubscribe = provider.Subscribe(this); } } public void Unsubscribe() { _unsubscribe?.Dispose(); _unsubscribe = null; } public void OnCompleted() { Console.WriteLine("CurrentConditionDisplayX: OnCompleted"); Unsubscribe(); } public void OnError(Exception error) { Console.WriteLine("CurrentConditionDisplayX: OnError"); } public void OnNext(WeatherMessage value) { _temperature = value.Temperature; _humidity = value.Humidity; Display(); } public void Display() { Console.WriteLine($"Current Conditions: {_temperature}F degress and {_humidity}% humidity"); } }

4.3IObservable具体实现

public class WeatherDataX : IObservable<WeatherMessage> { private readonly List<IObserver<WeatherMessage>> _observerList; public WeatherDataX() { _observerList = new List<IObserver<WeatherMessage>>(); } /// <summary> /// 通知提供程序:某观察程序将要接收通知。 /// </summary> /// <param name="observer">要接收通知的对象。</param> /// <returns>使资源释放的观察程序的接口。</returns> public IDisposable Subscribe(IObserver<WeatherMessage> observer) { if(!_observerList.Contains(observer)) { _observerList.Add(observer); } return new Unsubcriber(_observerList, observer); } public void SetMeasurements(Nullable<WeatherMessage> message) { foreach (var observer in _observerList) { if (!message.HasValue) { observer.OnError(new MessageUnknownException()); } else { observer.OnNext(message.Value); } } } public void EndTransmission() { foreach (var observer in _observerList.ToArray()) { if (_observerList.Contains(observer)) { observer.OnCompleted(); } } _observerList.Clear(); } private class Unsubcriber : IDisposable { private List<IObserver<WeatherMessage>> _observerList; private IObserver<WeatherMessage> _observer; public Unsubcriber(List<IObserver<WeatherMessage>> observerList, IObserver<WeatherMessage> observer) { _observerList = observerList; _observer = observer; } public void Dispose() { if (_observerList != null && _observerList.Contains(_observer)) { _observerList.Remove(_observer); } } } }

4.4 测试代码

private static void TestWeatherDataX() { var weatherData = new WeatherDataX(); var currentConditionDisplay = new CurrentConditionDisplayX(); currentConditionDisplay.Subscribe(weatherData); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 80, Humidity = 65, Pressure = 30.4f }); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 82, Humidity = 70, Pressure = 29.2f }); weatherData.SetMeasurements(new WeatherMessage() { Temperature = 78, Humidity = 90, Pressure = 29.2f }); weatherData.EndTransmission(); }

以上就是c# 实现观察者模式的详细内容,更多关于c# 观察者模式的资料请关注自由互联其它相关文章!