Head First设计模式之抽象工厂模式

简介: 一、定义 给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足一下条件:     1)系统中有多个产品族,而系统一次只可能消费其中一族产品。      2)同属于同一个产品族的产品以其使用。

一、定义

给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足一下条件:
     1)系统中有多个产品族,而系统一次只可能消费其中一族产品。 
     2)同属于同一个产品族的产品以其使用。 

二、结构

抽象工厂模式的各个角色(和工厂方法一样): 
     1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
     2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
     3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
     4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

三、实现

 

namespace DesignPatterns.AbstractFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            IAbstractFactory factory = null;

            factory = new XiaomiFactory();
            factory.ProductMobile();
            factory.ProductMp3();

            factory = new HuaweiFactory();
            factory.ProductMobile();
            factory.ProductMp3();
        }
    }

    public abstract class AbstractProduct
    {

    }

    public abstract class Mobile : AbstractProduct
    {

    }
    public class XiaomiMobile : Mobile
    {

    }
    public class HuaweiMobile : Mobile
    {

    }
    public abstract class Mp3 : AbstractProduct
    {
    }
    public class XiaomiMp3 : Mp3
    {
    }
    public class HuaweiMp3 : Mp3
    {
    }

    public interface IAbstractFactory
    {
        Mobile ProductMobile();
        Mp3 ProductMp3();
    }

    public class XiaomiFactory : IAbstractFactory
    {
        public Mobile ProductMobile()
        {
            Console.WriteLine("生产小米手机.");
            return new XiaomiMobile();
        }

        public Mp3 ProductMp3()
        {
            Console.WriteLine("生产小米MP3.");
            return new XiaomiMp3();
        }
    }

    public class HuaweiFactory : IAbstractFactory
    {
        public Mobile ProductMobile()
        {
            Console.WriteLine("生产华为手机.");
            return new HuaweiMobile();
        }

        public Mp3 ProductMp3()
        {
            Console.WriteLine("生产华为MP3.");
            return new HuaweiMp3();
        }
    }
}

 

 

四、适用场景

  1、QQ 换皮肤,一整套一起换。

  2、生成不同操作系统的程序。

五、优缺点

优点:

抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

缺点:

增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性

 

 

欢迎阅读本系列文章:Head First设计模式之目录

 

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