设计模式笔记之虚拟工厂模式

这个嘛。。。有点像工厂方法模式的升级版,但是又不太像。

这个模式里面有两个名词,一个是产品族,一个是产品等级结构。这两个词的意思呢。。。打个比方~

比如商场里面卖家用电器,比如有电视机,电冰箱,洗衣机什么的,品牌有海尔,海信等等。

然后产品族呢,就是指这个商场里面所有的电冰箱或者所有洗衣机,就是同一种类型的家用电器。

产品等级结构就是指这个商场里面所有的海尔牌的家用电器,也就是同一种品牌的。

所以跟工厂方法模式不同的是,这里面的一个工厂不再局限于一种产品,而是产生一族的产品,其余的没有太大改变。仍然分抽象工厂(既所有具体工厂的父类),具体工厂,抽象产品,具体产品

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AbstractFactory
{
    abstract class Factory//抽象工厂
    {
        public abstract ProductA CreateProdcctA();
        public abstract ProductB CreateProductB();
    }
    class Factory1:Factory//具体工厂1
    {
        public override ProductA CreateProdcctA()
        {
            ProductA1 PA1 = new ProductA1();
            return PA1;
        }
        public override ProductB CreateProductB()
        {
            ProductB1 PB1 = new ProductB1();
            return PB1;
        }
    }
    class Factory2 : Factory//具体工厂2
    {
        public override ProductA CreateProdcctA()
        {
            ProductA2 PA2 = new ProductA2();
            return PA2;
        }
        public override ProductB CreateProductB()
        {
            ProductB2 PB2 = new ProductB2();
            return PB2;
        }
    }
    class ProductA//产品结构等级A的基类
    {

    }
    class ProductA1:ProductA
    {
        public ProductA1()
        {
            Console.WriteLine(this);
        }
    }
    class ProductA2:ProductA
    {
        public ProductA2()
        {
            Console.WriteLine(this);
        }
    }
    class ProductB//产品结构等级B的基类
    {

    }
    class ProductB1 : ProductB
    {
        public ProductB1()
        {
            Console.WriteLine(this);
        }
    }
    class ProductB2 : ProductB
    {
        public ProductB2()
        {
            Console.WriteLine(this);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Factory f;
            f = new Factory1();
            ProductA PA=f.CreateProdcctA();//因为调用的是生成A类产品 所以用ProductA的变量
            Console.WriteLine(PA);//看生成结果
        }
    }
}

因为这种结构,所以这种模式的优缺点也比较明显。

优点:增加产品族比较方便

          相对于工厂方法模式,不再是一对一的关系,比较方便,节省空间

          当一个产品线的多个对象在使用时,能保证他们是同一个族

缺点:增加新的产品等级结构相当麻烦。。。

使用条件:设计完之后不会向系统增加新的产品等级结构

                 属于同一个族的产品将一起使用

你可能感兴趣的:(设计模式笔记)