设计模式 抽象工厂模式

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

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

抽象工厂模式结构图:

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

应用场景:一个生产集团,在北京的工厂需要生产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();  
        }  
    }  

 

 

博客内容仅代表个人观点,如发现阐述有误,麻烦指正,谢谢!
目录
相关文章
|
8月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
45 0
|
7月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
36 5
|
8月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
8月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
73 2
|
8月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
257 4
|
4月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
5月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
47 1
|
5月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
5月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
5月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    54
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    61
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    47
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137