23种设计模式的定义和应用场景:
单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)
适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)
责任链模式(Chain of Resposibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Mementor)、观察者模式(Oberver)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问者模式 (Visitor)
1-创建型模式-C#代码
1. 创建型模式
1.1 单例模式 (Singleton)
定义: 确保一个类只有一个实例,并提供一个全局访问点。
应用场景: 数据库连接、日志记录器
public sealed class Singleton
{
private static Singleton _instance = null;
private static readonly object _lock = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
lock (_lock)
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
}
}
1.2 工厂方法模式 (Factory Method)
定义: 定义一个创建对象的接口,但让子类决定实例化哪个类。
应用场景: 日志记录器、数据库连接工厂。
public interface IProduct
{
void Operation();
}
public class ConcreteProduct : IProduct
{
public void Operation()
{
Console.WriteLine("ConcreteProduct Operation");
}
}
public abstract class Creator
{
public abstract IProduct FactoryMethod();
}
public class ConcreteCreator : Creator
{
public override IProduct FactoryMethod()
{
return new ConcreteProduct();
}
}
1.3 抽象工厂模式 (Abstract Factory)
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
应用场景: GUI库、跨平台应用。
public interface IAbstractFactory
{
IProductA CreateProductA();
IProductB CreateProductB();
}
public class ConcreteFactory1 : IAbstractFactory
{
public IProductA CreateProductA() => new ProductA1();
public IProductB CreateProductB() => new ProductB1();
}
public interface IProductA { }
public interface IProductB { }
public class ProductA1 : IProductA { }
public class ProductB1 : IProductB { }
1.4 建造者模式 (Builder)
定义: 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
应用场景: 创建复杂对象,如HTML文档生成器。
public class Product
{
public List<string> Parts = new List<string>();
public void Add(string part) => Parts.Add(part);
public void Show() => Parts.ForEach(Console.WriteLine);
}
public interface IBuilder
{
void BuildPartA();
void BuildPartB();
Product GetResult();
}
public class ConcreteBuilder : IBuilder
{
private Product _product = new Product();
public void BuildPartA() => _product.Add("PartA");
public void BuildPartB() => _product.Add("PartB");
public Product GetResult() => _product;
}
public class Director
{
public void Construct(IBuilder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
1.5 原型模式 (Prototype)
定义: 通过复制现有对象来创建新对象。
应用场景: 对象创建成本高或需要动态配置。
public abstract class Prototype
{
public abstract Prototype Clone();
}
public class ConcretePrototype : Prototype
{
public override Prototype Clone() => (Prototype)this.MemberwiseClone();
}