设计模式之抽象工厂

抽象工厂模式(Abstract Factory Pattern)

意图:
Provide an interface for creating families of related or dependent objects without specifying their concrete classes。 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。 
适用性:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。

抽象模式通用类图:
抽象模式通用类图

抽象工厂模式通用源码类图:
抽象工厂模式通用源码类图

抽象产品类:
    public abstract class AbstractProductA{
        public abstract void Create();
    }
    public abstract class AbstractProductB{
        public abstract void Create();
    }   
产品实现类:
    public class ProductA1:AbstractProductA{
        public override void Create (){
            Console.WriteLine ("ProductA1");
        }
    }
    public class ProductA2:AbstractProductA{
        public override void Create (){
            Console.WriteLine ("ProductA2");
        }
    }

    public class ProductB1:AbstractProductB{
        public override void Create (){
            Console.WriteLine ("ProductB1");
        }
    }
    public class ProductB2:AbstractProductB{
        public override void Create (){
            Console.WriteLine ("ProductB2");
        }
    }
抽象工厂类:
    public abstract class AbstractFactory{
        public abstract AbstractProductA CreateProductA (); 
        public abstract AbstractProductB CreateProductB (); 
    }
工厂实现类:
    public class ConcreteFactory1:AbstractFactory{
        public override AbstractProductA CreateProductA (){
            return new ProductA1 ();
        }
        public override AbstractProductB CreateProductB (){
            return new ProductB1 ();
        }
    }
    public class ConcreteFactory2:AbstractFactory{
        public override AbstractProductA CreateProductA (){
            return new ProductA2 ();
        }
        public override AbstractProductB CreateProductB (){
            return new ProductB2 ();
        }
    }
场景类:
    public class Client{
        public static void Main (string[] args){
            ConcreteFactory1 f1 = new ConcreteFactory1 ();
            f1.CreateProductA().Create();
            f1.CreateProductB().Create();
            ConcreteFactory2 f2 = new ConcreteFactory2 ();
            f2.CreateProductA().Create();
            f2.CreateProductB().Create();           
        }
    }

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值