设计模式- 抽象工厂模式

简介: 设计模式- 抽象工厂模式

N+1

假设目前你的程序里面有三个对象IphoneX、IphoneXs、IphoneXR的尺寸,那么你使用工厂模式就已经足够了,因为她们属于同一个品类,都属于苹果,如果在添加一个IPhone2022产品,也只需要把IPhone2022加入到你的苹果工厂里面就够了。

但是如果你程序里面还需要知道华为mate10或者小米8的尺寸。这时候你怎么来创建这些对象呢?这时候工厂模式明显已经不适用了,因为工厂模式是对象都实现了同一个接口,这时候就可以使用抽象工厂模式了。

抽象工工厂模式和工厂模式的区别:

抽象工厂模式的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。

工厂方法模式的定义:为某个对象提供一个接口,而且无需指定它们的具体类。

都是子类实现接口的方法,并在子类写具体的代码。

工厂方法模式中也是可以有多个具体工厂,也是可以有多个抽象产品,和多个具体工厂、具体产品类。

是在抽象工厂接口类中,能创建几个产品对象。

抽象工厂模式的工厂能创建多个相关的产品对象,而工厂方法模式的工厂只创建一个产品对象。

什么是抽象工厂模式?

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

结构图

应用场景

当创建的对象是一系列相互关联或相互依赖的产品族时,如华为手机、华为平板、华为电脑

系统中有多个产品族,但每次只使用其中一族的产品,如李宁、耐克、阿迪,但有些人只穿李宁牌子的服装和鞋子

系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构,如输入法皮肤 要换就整套换

优缺点

难以支持新种类的产品

抽象方法模式的最大缺点就是产品族本身的扩展非常困难。如果在产品族中增加一个新的产品类型,则需要修改多个接口,并影响现已有的工厂类。

代码

抽象类

//抽象产品:咖啡类
    public abstract class Coffee
    {
       public  abstract void show();
    }
    //抽象产品:甜品类
    public abstract class Dessert
    {
        public abstract void show();
    }

具体类

//具体产品:美式咖啡
    public class AmericanCoffee  : Coffee
    { 
     public override   void show()
        {Console.WriteLine("美式咖啡"); }
    }
    //具体产品:拿铁咖啡
    public class LatteCoffee : Coffee
    {
        public override void show()
        { Console.WriteLine("拿铁咖啡"); }
    }
    //具体产品:提拉米苏
    public class Trimisu : Dessert
    {
        public override void show()
        { Console.WriteLine("提拉米苏"); }
    }
    //具体产品:抹茶慕斯
    public class MatchMousse : Dessert
    {
        public override void show()
        { Console.WriteLine("抹茶慕斯"); }
    }

接口

public interface IFactory
{
    Coffee createCoffee();//生产咖啡
    Dessert createDessert();//擅长甜品
}

两个饭店

//美式风味工厂 生产美式咖啡和抹茶慕斯
    class AmericanFlavorFactory : IFactory
    {
    public Coffee createCoffee()
    {
        return new AmericanCoffee();
    }
    public Dessert createDessert()
    {
        return new MatchMousse();
    }
}
    //意大利风味工厂 生产拿铁咖啡和提拉米苏
    class ItalyFlavorFactory  : IFactory
    {
        public Coffee createCoffee() 
    {
        return new LatteCoffee();
    }
    public Dessert createDessert()
    {
        return new Trimisu();
    }
 }

客户端

AmericanFlavorFactory factory = new AmericanFlavorFactory(); //小张喜欢美式美味的食物                                                             
                Coffee coffee = factory.createCoffee();
                Dessert dessert = factory.createDessert();
                coffee.show();
                dessert.show();


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