C# 抽象工厂
来源:互联网 发布:淘宝怎样找货源 编辑:程序博客网 时间:2024/06/05 15:02
C# 抽象工厂
工厂模式 虽然可以解决多种产品的需求变更,但是还是不能解决单个产品的需求变更,加入某种产品需求变更,可以升级了!那么工厂模式将不再符合当前的设计模式,所以有了抽象工厂,在工厂设计模式中,每个工厂返回的产品对象是固定的,抽象工厂提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类
产品类
产品多了一个属性 : 等级
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyProduct{ public enum ProductType { product1, product2, } public abstract class Product { public ProductType productType; //新增产品的等级 public int productLevel; public abstract void printProductName(); } public class Product1 : Product { public override void printProductName() { Console.WriteLine("this is Product1 level = {0} ",this.productLevel); } public Product1() { this.productType = ProductType.product1; } } public class Product2 : Product { public override void printProductName() { Console.WriteLine("this is Product2 level = {0} ", this.productLevel); } public Product2() { this.productType = ProductType.product2; } }}
工厂类
每个工厂的创建产品方法不再直接返回某个产品的对象,而是提供了两个接口,用于创建某个产品的不同等级下的产品
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MyProduct;namespace MyFactory{ //简单工厂实现 修改起来需要频繁添加 case语句 , 不易维护 //class Factory //{ // public static Product CreateProduct(ProductType type) // { // Product product = null; // switch (type) // { // case ProductType.product1: // { // product = new Product1(); // } // break; // case ProductType.product2: // { // product = new Product2(); // } // break; // default: // break; // } // return product; // } //} //工厂设计模式 , 不利于同种产品在不同工厂的变化 比如产品可以升级 //public abstract class Factory //{ // public abstract Product CreateProduct(); //} //public class Factory1 : Factory //{ // public override Product CreateProduct() // { // return new Product1(); // } //} //public class Factory2 : Factory //{ // public override Product CreateProduct() // { // return new Product2(); // } //} //抽象工厂 public abstract class Factory { public abstract Product createlevel1Procuct(); public abstract Product createlevel2Product(); } public class Factory1 : Factory { public override Product createlevel1Procuct() { Product product1 = new Product1(); product1.productLevel = 1; return product1; } public override Product createlevel2Product() { Product product2 = new Product1(); product2.productLevel = 2; return product2; } } public class Factory2 : Factory { public override Product createlevel1Procuct() { Product product1 = new Product2(); product1.productLevel = 1; return product1; } public override Product createlevel2Product() { Product product2 = new Product2(); product2.productLevel = 2; return product2; } }}
具体应用
Factory factory1 = new Factory1(); //工厂可以根据不同的 方法创建不同等级的产品 Product product1 = factory1.createlevel1Procuct(); Product product1_2 = factory1.createlevel2Product(); product1.printProductName(); product1_2.printProductName(); Factory factory2 = new Factory2(); Product product2 = factory2.createlevel1Procuct(); Product product2_2 = factory2.createlevel2Product(); product2.printProductName(); product2_2.printProductName();
运行结果
0 0
- C#工厂模式-抽象工厂
- c#抽象工厂实例
- C#简单抽象工厂
- C# 抽象工厂模式
- C# 抽象工厂
- C#抽象工厂模式学习
- C#抽象工厂模式实现
- C# 实现抽象工厂模式
- c#工厂模式与抽象工厂模式
- c#工厂模式与抽象工厂模式
- c#工厂模式与抽象工厂模式
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- C# 设计模式 之 抽象工厂模式
- C#设计模式之抽象工厂模式
- linux下动态库(一)
- poj 1988 Cube Stacking(并查集)
- Erlang:第一个Erlang程序,模块,函数
- OC基本对象类型
- Spring事务配置的五种方式
- C# 抽象工厂
- centos内核升级
- Mysql 选择优化的数据类型
- Android 的 Handler 总结
- 适配器(Adapter)——类对象结构型模式
- webservice示例(java)
- 彻底根除“无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:”的问题
- Ugly Number
- STL学习----入门(1)[forward_list]