欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo

设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo

2024/12/28 10:42:40 来源:https://blog.csdn.net/m0_67412019/article/details/144719182  浏览:    关键词:设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo

一、单例模式

1.情景

连接字符串管理

2.好处

  • 代码简洁:可全局访问连接字符串。
  • 性能优化:一个程序一个连接实例,避免反复创建对象(连接)和销毁对象(连接)。
  • 线程安全:连接对象不会被重复创建,从而避免并发冲突。

3.Demo

using System;
using SqlSugar;public class SqlSugarSingleton
{// 使用 Lazy<T> 来保证延迟初始化和线程安全//Lazy<T> 通过内部的机制确保在多线程环境下的安全性,而且在首次访问时才会初始化对象实例,从而避免了重复创建和资源浪费。private static readonly Lazy<SqlSugarClient> lazyInstance = new Lazy<SqlSugarClient>(() =>{// 配置 SqlSugarClient 实例return new SqlSugarClient(new ConnectionConfig{ConnectionString = "Server=localhost;Database=TestDB;User Id=myuser;Password=mypassword;",DbType = DbType.MySql, // 根据你的数据库类型选择IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute});});// 获取 SqlSugarClient 实例public static SqlSugarClient Instance => lazyInstance.Value;
}class Program
{static void Main(){// 获取唯一的 SqlSugarClient 实例SqlSugarClient db = SqlSugarSingleton.Instance;// 示例查询var result = db.Queryable<Student>().Where(s => s.Age > 18).ToList();Console.WriteLine($"查询结果数量: {result.Count}");}
}// 假设我们有一个学生类,用于展示查询操作
public class Student
{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }
}

二、简单工厂模式

1.情景 

        可由参数决定实例化哪个类,不同的类调用相同的方法有不同的效果。

2.好处

  • 便于开发:无需知道具体类的实现细节,只需要通过入参实现想要的效果
  • 扩展方便:若要增加或者修改,对抽象类的子类操作即可,不需要改客户端代码(Main函数)
  • 简单简洁:减少了客户端(Main函数)的复杂度,调用时简洁大方。

3.代码思路

  • 抽象类和子类:写一个抽象类(含抽象方法),再写n个它的子类(及其父类抽象方法的实现)
  • 工厂类:写一个简单工厂,由字符串决定要实例化的类
  • 客户端使用:先用简单工厂创建对象,然后再用这个对象调用方法

4.Demo

using System;// 抽象产品类 (先写一个抽象类,含有抽象方法)
public abstract class Product
{public abstract void Show();
}// 具体产品 A (再写n个它的子类,及其父类抽象方法的实现)
public class ConcreteProductA : Product
{public override void Show(){Console.WriteLine("ConcreteProductA");}
}// 具体产品 B
public class ConcreteProductB : Product
{public override void Show(){Console.WriteLine("ConcreteProductB");}
}// 简单工厂 (然后,写一个简单工厂,由字符串决定要实例化的类)
public class ProductFactory
{public static Product CreateProduct(string type){if (type == "A")return new ConcreteProductA();else if (type == "B")return new ConcreteProductB();elsethrow new ArgumentException("Invalid product type");}
}class Program
{static void Main(){//客户端使用:先用简单工厂创建对象,然后再用这个对象调用方法Product productA = ProductFactory.CreateProduct("A");productA.Show();Product productB = ProductFactory.CreateProduct("B");productB.Show();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com