设计模式 抽象工厂模式

简介: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。

抽象工厂模式结构图:

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

应用场景:一个生产集团,在北京的工厂需要生产A类汽车,A类电视;在上海的工厂需要生产B类汽车,A类电视。而在广州的工厂需要生产C类汽车,C类电视。我们可以使用抽象工厂,抽象出工厂类,和产品类,然后继承工厂类,生产所需要的具体产品类型,产品继承抽象出来的产品,实现里面的行为方法。

1.抽象出Car产品和TV产品

    /// <summary>
    /// 抽象汽车产品
    /// </summary>
    public abstract class Car
    {
        public abstract void Build();
    }
    /// <summary>
    /// 抽象TV产品
    /// </summary>
    public abstract class TV
    {
        public abstract void work();
    }

2.继承自抽象出来的产品类,实现里面的方法,成为具体产品:这里只举例Acar和TVA的,后面的Bcar,Ccar,TVB,TVC,类似。

    public class CarA:Car    
    {
        public override void Build()
        {
            Console.WriteLine("CarA");
        }
    }
    public class TVA : TV
    {
        public override void work()
        {
            Console.WriteLine("TVA");
        }
    }

3.抽象出工厂类,里面有待实现创建产品的方法

    /// <summary>
    /// 抽象生产工厂
    /// </summary>
    public abstract class AbstractFactory
    {

        /// <summary>
        /// 生产TV产品
        /// </summary>
        /// <returns></returns>
        public abstract TV newTV();

        /// <summary>
        /// 生产Car类产品
        /// </summary>
        /// <returns></returns>
        public abstract Car newCar();
    }

4.创建具体的工厂类,继承自抽象出来的工厂,实现里面创建具体产品的方法。例:后面的B工厂,和C工厂类似实现

    /// <summary>
    /// A工厂
    /// </summary>
    public class AbstractFactoryA:AbstractFactory
    {
        /// <summary>
        /// 生产A品牌电视
        /// </summary>
        /// <returns></returns>
        public override TV newTV()
        {
            return new TVA();
        }

        /// <summary>
        /// 生产A品牌汽车
        /// </summary>
        /// <returns></returns>
        public override Car newCar()
        {
            return new CarA();  
        } 
    }
    /// <summary>
    /// B工厂生
    /// </summary>
    public class AbstractFactoryB:AbstractFactory
    {
        /// <summary>
        /// 生产B品牌电视
        /// </summary>
        /// <returns></returns>
        public override TV newTV()
        {
            return new TVB();
        }

        /// <summary>
        /// 生产A品牌汽车
        /// </summary>
        /// <returns></returns>
        public override Car newCar()
        {
            return new CarA();
        }
    }
    public class AbstractFactoryC:AbstractFactory
    {
        /// <summary>
        /// 生产C品牌电视
        /// </summary>
        /// <returns></returns>
        public override TV newTV()
        {
            return new TVC();
        }

        /// <summary>
        /// 生产C品牌汽车
        /// </summary>
        /// <returns></returns>
        public override Car newCar()
        {
            return new CarC();
        }
    }

5.调用,根据具体情况进行选择,现在是在哪一个工厂,就创建该工厂

    class Program  
    {  
        static void Main(string[] args)  
        {  
            AbstractFactory factorysubA = new AbstractFactoryA();  
            TV t = factorysubA.newTV();  
            Car c = factorysubA.newCar();  
            Console.WriteLine("A工厂生产:");  
            t.work();  
            c.Build();  
  
            AbstractFactory factorysubB = new AbstractFactoryB();  
            t = factorysubB.newTV();  
            c = factorysubB.newCar();  
            Console.WriteLine("B工厂生产:");  
            t.work();  
            c.Build();  
  
            AbstractFactory factorysunC = new AbstractFactoryC();  
            t = factorysunC.newTV();  
            c = factorysunC.newCar();  
            Console.WriteLine("C工厂生产:");  
            t.work();  
            c.Build();  
            Console.Read();  
        }  
    }  

 

 

博客内容仅代表个人观点,如发现阐述有误,麻烦指正,谢谢!
目录
相关文章
|
6月前
|
设计模式 C++
设计模式之抽象工厂模式(C++)
设计模式之抽象工厂模式(C++)
|
6月前
|
设计模式
设计模式~抽象工厂模式-04
抽象工厂 优点 缺点 使用场景 为创建一组相
29 0
|
4月前
|
设计模式 Java
Java设计模式【三】:抽象工厂模式
Java设计模式【三】:抽象工厂模式
18 0
|
7月前
|
设计模式
设计模式~~~抽象工厂模式
设计模式~~~抽象工厂模式
28 0
|
15天前
|
设计模式 Java Windows
23种设计模式,抽象工厂模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建相关或依赖对象的家族,而不需要指定具体类。该模式允许客户端在不知道具体类的情况下,通过其共同的接口来创建一组产品。
27 7
|
3月前
|
设计模式 Oracle 关系型数据库
设计模式 | 抽象工厂模式
设计模式 | 抽象工厂模式
22 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——02抽象工厂模式
Golang设计模式——02抽象工厂模式
21 0
|
8月前
|
设计模式 Java 数据库连接
Java设计模式之抽象工厂模式:创造多个相关对象
在软件开发领域,设计模式是一种用于解决常见问题的实践方法,它提供了一些被验证过的指导原则。抽象工厂模式是创建型设计模式中的佼佼者,可以帮助我们在处理多个相关对象的创建时保持一致性。让我们深入了解抽象工厂模式的内涵以及它如何在Java中应用。
61 0
|
3月前
|
设计模式 前端开发
【设计模式】之抽象工厂模式
抽象工厂模式是一种创建型设计模式,适用于需要创建一系列相关或相互依赖对象的场景。在前端开发中,抽象工厂模式可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。它通过封装对象的创建过程,使得客户端代码与具体类解耦,并且可以通过切换具体工厂类来改变整个系统的行为。然而,它也增加了系统的复杂度,并且当产品族较多时会导致大量的具体工厂类。因此,在使用抽象工厂模式时需要权衡利弊,并根据实际情况进行选择。
53 0
【设计模式】之抽象工厂模式
|
3月前
|
设计模式 NoSQL 中间件
设计模式 - 创建型模式_抽象工厂模式
设计模式 - 创建型模式_抽象工厂模式
22 0