C 设计模式实践教程:开发案例解析
设计模式是软件开发中常用的一套解决问题的模板,它可以帮助开发者解决在软件开发过程中遇到的一些常见问题。在C语言中,设计模式被广泛应用,可以帮助开发者写出更加清晰、可维护和可扩展的代码。本文将围绕C语言,通过一系列开发案例,实践设计模式的应用。
1. 单例模式(Singleton)
单例模式确保一个类只有一个实例,并提供一个全局访问点。以下是一个简单的单例模式实现:
csharp
public class Singleton
{
private static Singleton instance;
private static readonly object lockObj = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObj)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
2. 工厂模式(Factory Method)
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。以下是一个工厂模式的实现:
csharp
public abstract class Product
{
public abstract void Use();
}
public class ConcreteProductA : Product
{
public override void Use()
{
Console.WriteLine("使用产品A");
}
}
public class ConcreteProductB : Product
{
public override void Use()
{
Console.WriteLine("使用产品B");
}
}
public abstract class Creator
{
public abstract Product FactoryMethod();
}
public class ConcreteCreatorA : Creator
{
public override Product FactoryMethod()
{
return new ConcreteProductA();
}
}
public class ConcreteCreatorB : Creator
{
public override Product FactoryMethod()
{
return new ConcreteProductB();
}
}
3. 观察者模式(Observer)
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。以下是一个观察者模式的实现:
csharp
public interface IObserver
{
void Update();
}
public interface ISubject
{
void RegisterObserver(IObserver observer);
void RemoveObserver(IObserver observer);
void NotifyObservers();
}
public class ConcreteSubject : ISubject
{
private List observers = new List();
private int state;
public void RegisterObserver(IObserver observer)
{
observers.Add(observer);
}
public void RemoveObserver(IObserver observer)
{
observers.Remove(observer);
}
public void NotifyObservers()
{
foreach (IObserver observer in observers)
{
observer.Update();
}
}
public void SetState(int state)
{
this.state = state;
NotifyObservers();
}
}
public class ConcreteObserver : IObserver
{
private ISubject subject;
public ConcreteObserver(ISubject subject)
{
this.subject = subject;
subject.RegisterObserver(this);
}
public void Update()
{
Console.WriteLine("观察者收到通知,状态已更新");
}
}
4. 装饰者模式(Decorator)
装饰者模式动态地给一个对象添加一些额外的职责,而不改变其接口。以下是一个装饰者模式的实现:
csharp
public abstract class Component
{
public abstract void Operation();
}
public class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("执行具体组件操作");
}
}
public abstract class Decorator : Component
{
protected Component component;
public Decorator(Component component)
{
this.component = component;
}
public override void Operation()
{
component.Operation();
}
}
public class ConcreteDecoratorA : Decorator
{
public ConcreteDecoratorA(Component component) : base(component) { }
public override void Operation()
{
base.Operation();
Console.WriteLine("添加额外职责A");
}
}
5. 适配器模式(Adapter)
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以一起工作。以下是一个适配器模式的实现:
csharp
public interface ITarget
{
void Request();
}
public class Target : ITarget
{
public void Request()
{
Console.WriteLine("目标请求");
}
}
public interface IAdaptee
{
void SpecificRequest();
}
public class Adaptee : IAdaptee
{
public void SpecificRequest()
{
Console.WriteLine("适配者特有请求");
}
}
public class Adapter : ITarget
{
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
public void Request()
{
adaptee.SpecificRequest();
}
}
总结
本文通过一系列C开发案例,实践了单例模式、工厂模式、观察者模式、装饰者模式和适配器模式。这些设计模式在软件开发中具有广泛的应用,可以帮助开发者写出更加清晰、可维护和可扩展的代码。在实际开发过程中,开发者可以根据具体需求选择合适的设计模式,以提高代码质量。
Comments NOTHING