抽象工厂
2010-08-26 22:24 Clingingboy 阅读(704) 评论(0) 编辑 收藏 举报提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
对于不同类产品提供一类工厂
1.产品接口
interface IBag { string Material { get; } } // Product 2 interface IShoes { int Price { get; } }
2.工厂
这里采用了泛型,所以会更灵活些
interface IFactory<Brand> where Brand : IBrand { IBag CreateBag(); IShoes CreateShoes(); } // Conctete Factories (both in the same one) class Factory<Brand> : IFactory<Brand> where Brand : IBrand, new() { public IBag CreateBag() { return new Bag<Brand>(); } public IShoes CreateShoes() { return new Shoes<Brand>(); } }
3.IBrand
不同类产品信息
interface IBrand { int Price { get; } string Material { get; } } class Gucci : IBrand { public int Price { get { return 1000; } } public string Material { get { return "Crocodile skin"; } } } class Poochy : IBrand { public int Price { get { return new Gucci().Price / 3; } } public string Material { get { return "Plastic"; } } } class Groundcover : IBrand { public int Price { get { return 2000; } } public string Material { get { return "South african leather"; } } }
4.对不同类产品创建不同工厂
class Client<Brand> where Brand : IBrand, new() { public void ClientMain() { //IFactory<Brand> factory) IFactory<Brand> factory = new Factory<Brand>(); IBag bag = factory.CreateBag(); IShoes shoes = factory.CreateShoes(); Console.WriteLine("I bought a Bag which is made from " + bag.Material); Console.WriteLine("I bought some shoes which cost " + shoes.Price); Console.ReadKey(); } } static class Program { static void Main() { // Call Client twice new Client<Poochy>().ClientMain(); new Client<Gucci>().ClientMain(); new Client<Groundcover>().ClientMain(); } }
此模式应该来说非常重要,应用也比较广泛.结合反射功能效果会更好.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-08-26 Spring.NET学习笔记(6)-基础AOP