抽象产品+抽象工厂(抽象工厂返回值为抽象产品) public interface productphone { public void phoneproduct() ; } public class Boss.creatphone(); productcomputer productcomputer=Boss.creatcoumputer(); System.out.println("工厂老大生产的手机为 "); productA.phoneproduct(); System.out.println("工厂老大生产的电脑为"); productcomputer.productcomputer
address = materialFactory.selectAddress(); 25 } 26 //可以重写父类方法,进行特殊处理 27} 新加坡苹果口味的面包,实现抽象方法 address = materialFactory.selectAddress(); 25 } 26 //可以重写父类方法,进行特殊处理 27} 新加坡奶油口味的面包,实现抽象方法 chinaBreadStoreFactory.orderBread("apple"); 17 } 18} 测试结果 1中国顾客买苹果味道面包 2创建中国苹果口味面包 3材料耗尽 4中国材料源_拿到材料 5搅拌 6搓圆 7加工 8烘烤 阿三:这里我使用了抽象工厂模式 项目组长阿飞:是的,抽象工厂经常以工厂方法的方式实现,抽象工厂的任务是定义一个负责创建一组产品的接口(材料提供点),接口内的每个方法都负责创建一个具体的产品(比如创建地址)。 然后利用实现抽象工厂的子类来提供这些具体的做法
抽象工厂模式 抽象工厂模式Abstract Factory是通过对类的工厂抽象使其业务用于对产品类簇的创建,而不仅仅是负责创建某一类产品的实例,抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类 ,抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 。 当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率。 模式结构 AbstractFactory: 抽象工厂。 另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
这里又出现了一个抽象工厂模式,这个抽象工厂模式又是什么呢? 我们现在来模拟一个场景,现在用的是Mysql数据库,明天让你更换为Oracle数据库。此时,想想要做多少的改动。 但我们如果用工厂模式,这会让你节省大量时间。 首先,我们用工厂方法模式来设计这个程序。 我们画出类的UML图。 上面我们实际上重新回顾了工厂方法模式,似乎已经达到了我们想要的效果。但是,数据库里不止一张表,两个数据库又是两大不同分类,解决这种涉及多个产品系列的问题,有一个专门的工厂模式叫抽象工厂模式。 所以实际上,如果增加一个新表,上面的工厂方法模式就有了一个新的名字——抽象工厂模式。 抽象工厂模式:提供一个创建一些列有关或互相依赖对象的接口,而无需制定它们具体的类。 下面我们进阶一下:用反射+抽象工厂的方式来设计这个程序。 是否记得在简单工厂模式中,我们用到了switch或者if。
简介 工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。 本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族, 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂 该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。 每个生成的工厂都能按照工厂模式提供对象。 AbstractSystemFac作为抽象工厂类,调用了上述的三个接口,来组装三个不同的产品。
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 这就是抽象工厂模式的缺点了。 综上所述,结合其他情况,以下情况可以使用抽象工厂模式: 1、一个系统不应当依赖于产品实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是重要的。 关于抽象工厂模式的起源,是用于创建分属于不同操作系统的视窗构建。 总结 抽象工厂模式在工厂方法模式的基础上,增添了产品族和产品等级结构的概念,以及只使用同一个产品族中的约束,使得抽象工厂模式符合现实生活中的某些场景,成为实用的设计模式,再加上抽象工厂模式实现高内聚低耦合 参考: 《JAVA与模式》之抽象工厂模式 2018年8月25日18:31:58
."); } } 为 Color 和 Shape 对象创建抽象类来获取工厂:AbstractFactory.java public abstract class AbstractFactory { getColor(String color); public abstract Shape getShape(String shape) ; } 创建扩展了 AbstractFactory 的工厂类 (color.equalsIgnoreCase("BLUE")){ return new Blue(); } return null; } } 创建一个工厂创造器 /生成器类,通过传递形状或颜色信息来获取工厂:FactoryProducer.java public class FactoryProducer { public static AbstractFactory public class AbstractFactoryPatternDemo { public static void main(String[] args) { //获取形状工厂
简介 抽象工厂模式 (Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 抽象工厂模式是一种类创建型模式 (可参考 设计模式 创建型模式)。 图-抽象工厂模式结构图 抽象工厂模式包含以下角色: AbstractFactory(抽象工厂) ConcreteFactory(具体工厂) AbstractProduct(抽象产品) ConcreteProduct 要点 优点 (1)抽象工厂模式隔离了具体类的生成,用户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂变得相对容易。 另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。 (2)当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。 简单工厂模式属于工厂模式家族,欢迎参考阅读 简单工厂模式 、工厂方法模式 。 参考资料 《大话设计模式》 《HeadFirst设计模式》
抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢? 比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。
一、相关介绍 1、抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。 2、UML图 3、所属类别:创建型 二、C++程序 1 // 抽象工厂模式.cpp : 定义控制台应用程序的入口点。 }; 87 88 void PCwindows::show_price() 89 { 90 cout<<"my price is 4999"<<endl; 91 } 92 //工厂抽象类 ){} 98 virtual linux* creatlinux()=0; 99 virtual windows*creatwindows()=0; 100 }; 101 //手机工厂 virtual windows* creatwindows() 112 { 113 return new pwindows(); 114 } 115 }; 116 //电脑工厂
抽象工厂模式 抽象工厂模式Abstract Factory是通过对类的工厂抽象使其业务用于对产品类簇的创建,而不仅仅是负责创建某一类产品的实例,抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类 ,抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 。 当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率。 模式结构 * AbstractFactory: 抽象工厂。 另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。 * 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
抽象工厂模式概述 2. 抽象工厂模式的结构与实现 3. 抽象工厂模式的应用实例 4. 抽象工厂模式的应用实例 5. 开闭原则的倾斜性 6. 抽象工厂模式概述 模式动机 当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式。 抽象工厂模式的定义 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 对象创建型模式 又称为工具(Kit)模式。抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。 抽象工厂模式的结构 抽象工厂模式包含以下4个角色: AbstractFactory(抽象工厂) ConcreteFactory(具体工厂) AbstractProduct(抽象产品) ConcreteProduct
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式, 它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 上图: ? 其实这个对比了之前的简单工厂模式,无非就是多了一个抽象类让我们可以选择的去找到对应的简单工厂类。 优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
抽象工厂模式详解 定义 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。 抽象工厂模式特别适合产品族的创建,保证产品的兼容性和一致性。 抽象工厂模式的特点 优点 分离接口与实现:客户端仅依赖抽象接口,与具体实现解耦。 抽象工厂模式的结构 核心角色 抽象工厂(Abstract Factory):定义创建一系列相关或相互依赖对象的接口。 抽象工厂 vs 工厂方法 特性 工厂方法模式 抽象工厂模式 关注点 单一产品的创建 产品族的创建 扩展性 添加新产品需新增具体工厂类 添加新产品族需新增抽象工厂及实现 复杂度 较低 较高 2. 抽象工厂扩展 结合单例模式:避免频繁创建工厂实例。 结合建造者模式:处理复杂产品的构建细节。 总结 抽象工厂模式非常适合产品族场景,能很好地保证产品间的兼容性。
工厂模式之抽象工厂 是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。类继承自抽象工厂,即可生产指定对象。新增实体的时候无需修改已有代码。 比如食物这个工厂,在现实世界中,它可以生产面包、鸡蛋、肉等,在魔法世界中,食物工厂可以生产魔法豆、会唱歌的火鸡、HP口服液等,我们把食物比作是最大的一个抽象工厂,现实世界(ModernFactory)抽象工厂和魔法世界 (MagicFactory)抽象工厂继承自最大的食物抽象工厂,然而bread面包、egg鸡蛋、meat肉类都继承自ModernFactory抽象工厂、MagicBeans魔法豆等继承自MagicFactory ,一步步化抽象为具体,抽象工厂实际最大的好处就是实现了代码的解耦。 Liutx * @date 2020/12/8 22:18 * @Description */ public abstract class Abstractory { /** * 抽象工厂可以生产食物
介绍 抽象工厂中 接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 在简单工厂中,我们需要一辆车就用CarFactory创建一个,但是我们需要一辆红色轿车,这时候就需要里一个油漆工厂来加工颜色。 { @Override public void fill() { System.out.println("死亡的气息"); } } 3、为Car和Color创建抽象类来获取工厂 ,用于生产工厂 public class FourSonFactoryProducer { public static AbstractFactory getFactory(String choice return new CarFactory(); } return null; } } 6、使用FourSonFactoryProducer获取工厂
一般我们会说设计模式一共有23种,总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 今天主要是分析 简单工厂模式、工厂模式和抽象工厂模式的区别,所以这里就简单介绍一下设计模式的概念。 工厂方法模式的结构组成: 抽象工厂类厂(AbstractFactory):工厂方法模式的核心类,提供创建具体产品的接口,由具体工厂类实现。 抽象工厂模式 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。是更多一重的工厂模式中。 结语 这就是我分享的简单工厂模式、工厂模式和抽象工厂模式的区别,如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。 —END—
昨天我们说到 Factory Method模式, 然后挖了个坑…没有说 Abstract Factory,主要是因为这两种模式之间相似度比较高, 一起讲容易混淆,所以就另起一篇来说了。 关于 Factory Method,可以回顾昨天的文章 Factory Method Factory Method Factory Method的最后说道复杂的设计模式,可以把 Factory进一步抽象 也不再需要用一个超级工厂类来管理所有的实例生产过程。 比如现在工厂不仅需要生产 Color对象,还需要生产 Brush对象用来刷 Color,而每个颜色需要跟对应的刷子一起用。 createColor(); Brush createBrush(); } 对于这种设计模式,通常是需要处理两个或以上的互相关联对象生成的时候,需要抽象到 Factory层面, 这也就是 Abstract
类型:创建类模式 类图: 抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。 他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。 在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。 明白了等级结构和产品族的概念,就理解工厂方法模式和抽象工厂模式的区别了,如果工厂的产品全部属于同一个等级结构,则属于工厂方法模式;如果工厂的产品来自多个等级结构,则属于抽象工厂模式。 总结 无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。
工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了