C# 语言 设计模式面试题解答

C#阿木 发布于 2 天前 1 次阅读


C 设计模式面试题解答

在设计模式领域,C 作为一种流行的编程语言,提供了丰富的设计模式实现。在设计模式面试中,掌握常见的设计模式及其应用场景是至关重要的。本文将围绕C语言,针对一些常见的设计模式面试题进行解答,旨在帮助读者更好地理解和应用设计模式。

1. 单例模式(Singleton)

问题:请实现一个单例模式,确保一个类只有一个实例,并提供一个全局访问点。

解答:

csharp
public class Singleton
{
private static Singleton instance;
private static readonly object lockObject = new object();

private Singleton() { }

public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockObject)
{
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("Using ConcreteProductA");
}
}

public class ConcreteProductB : Product
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductB");
}
}

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. 抽象工厂模式(Abstract Factory)

问题:请实现一个抽象工厂模式,用于创建一系列相关或相互依赖的对象。

解答:

csharp
public abstract class ProductA
{
public abstract void Use();
}

public abstract class ProductB
{
public abstract void Use();
}

public class ConcreteProductA1 : ProductA
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductA1");
}
}

public class ConcreteProductA2 : ProductA
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductA2");
}
}

public class ConcreteProductB1 : ProductB
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductB1");
}
}

public class ConcreteProductB2 : ProductB
{
public override void Use()
{
Console.WriteLine("Using ConcreteProductB2");
}
}

public abstract class AbstractFactory
{
public abstract ProductA CreateProductA();
public abstract ProductB CreateProductB();
}

public class ConcreteFactory1 : AbstractFactory
{
public override ProductA CreateProductA()
{
return new ConcreteProductA1();
}

public override ProductB CreateProductB()
{
return new ConcreteProductB1();
}
}

public class ConcreteFactory2 : AbstractFactory
{
public override ProductA CreateProductA()
{
return new ConcreteProductA2();
}

public override ProductB CreateProductB()
{
return new ConcreteProductB2();
}
}

4. 建造者模式(Builder)

问题:请实现一个建造者模式,用于创建复杂对象,同时允许你分步骤地创建对象。

解答:

csharp
public class Product
{
public string PartA { get; set; }
public string PartB { get; set; }
public string PartC { get; set; }

public override string ToString()
{
return $"Product {PartA}, {PartB}, {PartC}";
}
}

public class Builder
{
public Product Product { get; private set; }

public Builder()
{
Product = new Product();
}

public Builder AddPartA(string partA)
{
Product.PartA = partA;
return this;
}

public Builder AddPartB(string partB)
{
Product.PartB = partB;
return this;
}

public Builder AddPartC(string partC)
{
Product.PartC = partC;
return this;
}

public Product Build()
{
return Product;
}
}

5. 适配器模式(Adapter)

问题:请实现一个适配器模式,将一个类的接口转换成客户期望的另一个接口。

解答:

csharp
public interface Target
{
void Request();
}

public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("SpecificRequest");
}
}

public class Adapter : Target
{
private Adaptee adaptee;

public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}

public override void Request()
{
adaptee.SpecificRequest();
}
}

总结

本文通过C语言,针对单例模式、工厂模式、抽象工厂模式、建造者模式和适配器模式等常见设计模式进行了面试题解答。掌握这些设计模式对于提高代码的可维护性和可扩展性具有重要意义。在实际开发中,灵活运用设计模式可以解决许多常见问题,提高代码质量。