[DP]简单工厂,工厂方法和抽象工厂方法

芒果YOLOv11改进175:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子 芒果YOLOv11改进:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子 阅读详情

现在有请KFG快餐负责人登场,好的,我们的CEO需要做一些决策了

A:我们要在中国开我们的第一家店,这个店需要能够做薯条,汉堡。

B: 我选择死亡。GG,您的游戏到此结束,你没有理想,只是一条咸鱼。


我相信你们都会选择A:

首先我们得有点东西要卖,比如说薯条汉堡了啊。

abstract class Food {
	abstract public String getName();
}

class Chip extends Food {
	private String name = "Chip";

	@Override
	public String getName() {
		return name;
	}

}

class Hamburger extends Food {
	private String name = "Hamburger";

	@Override
	public String getName() {
		return name;
	}
}

好的,既然我们定制好了菜单,我们就可以开店了

enum FoodType {
	CHIP, HAMBURGER
}

class KFGStore {
	public static Food cookFood(FoodType type) {
		switch (type) {
		case CHIP:
			return new Chip();
		case HAMBURGER:
			return new Hamburger();
		default:
			return null;
		}
	}
}

开张大吉,坐等顾客。
class Customer {
	private static String[] remarks = { 
			"taste not so bad, i like it.", 
			"damn bad, it smells like expired.",
			"yummy,yummy." 
			};

	public FoodType makeOrder() {
		FoodType[] types = FoodType.values();
		int type = (int) (Math.random() * 100 % types.length);
		return types[type];
	}

	public void eatFood(Food food) {
		String remark = remarks[(int) (Math.random() * 100 % remarks.length)];
		System.out.println(food.getName() + "," + remark);
	}
}

顾客进来点餐吃饭了:

public class AbstractFactory {
	public static void main(String[] args) {
		Customer c = new Customer();
		Food f = KFGStore.cookFood(c.makeOrder());
		c.eatfodd(f);

	}
}



我们来分析一下上述简单工厂模型:

1.静态工厂方法cookFood是静态的,所以是不能被子类所继承的,所以就不能被扩展。

2.不用Customer自己去new出来食物,降低耦合。

3.因为是静态方法产生新的产品,那么假如我们需要增加一些食物,那么就需要更改工厂类的源代码。这违背了开闭原则:软件实体应当对扩展开放,对修改关闭。

4.我们看到制作各种食物都是在一个工厂方法内,根据订单选择食物的逻辑也是在工厂方法内的,这样的耦合程度非常高,所以可以考虑将业务逻辑选择移除。

简单工厂的组成:


         1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。
         2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。         
         3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 
        

至此,你的KFG快餐店已经开业成功,并且在用户中获得良好的反响,但是这已然不够,我们的顾客表示,这些东西吃不饱,我们需要一些炸鸡。

作为我们 KGF餐饮店的负责人,你现在有两个选择:

A:顾客是上帝,顾客的要求尽量去满足,好的,我们在订单中加入炸鸡。

B:去他妈的顾客,店是老子开的,老子做什么你们就得吃什么。GG,欢迎再次挑战餐厅游戏。


好的,很高兴你能在此选择A,但是修改源代码实则是很烦,不如我们再多开条产品线吧。我们可以有专门做汉堡的,有专门做薯条的,专门做炸鸡的产品线。

这听起来很不错的说,这样我就不用烦心菜单扩展了。

工厂方法模式组成: 


抽象工厂接口只有一个create方法,所有的客户所需要的具体产品,全部由子类延迟实例化。一个具体工厂只产生一个具体的产品。

一个抽象产品类,可以派生出多个具体产品类。 
 一个抽象工厂类,可以派生出多个具体工厂类。 
每个具体工厂类只能创建一个具体产品类的实例。

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

这个时候我们需要一个抽象的工厂类,来规定子类的行为,以及方便与扩展。

abstract class KFGFoodLine {
	abstract public Food cookFood();
}

好的,然后我们需要扩展成三条产品线,薯条产品线,汉堡产品线,炸鸡产品线。

class ChipFoodLine extends KFGFoodLine {
	@Override
	public Food cookFood() {
		return new Chip();
	}
}

class HambergerFoodLine extends KFGFoodLine {
	@Override
	public Food cookFood() {
		return new Hamburger();
	}
}

class ChickenFoodLine extends KFGFoodLine {
	@Override
	public Food cookFood() {
		return new Chicken();
	}
}

对于Customer类并没有多大改变,顾客只要下单和消费产品就可以了。

但是我们可以将食品线中的根据订单制作食物的业务逻辑外移。这样就可以方便与扩展,不用去修改食品线中的工厂方法来产生更多的订单了。

public class AbstractFactory {
	public static void main(String[] args) {
		KFGFoodLine chipFoodLine = new ChipFoodLine();
		KFGFoodLine hamberherFoodLine = new HambergerFoodLine();
		KFGFoodLine chickenFoodLine = new ChickenFoodLine();
		Customer c = new Customer();
		FoodType type = c.makeOrder();
		Food f = null;
		switch (type) {
		case CHIP:
			f = chipFoodLine.cookFood();
			break;
		case HAMBURGER:
			f = hamberherFoodLine.cookFood();
			break;
		case CHICKEN:
			f = chickenFoodLine.cookFood();
			break;
		default:
			break;
		}
		c.EatFodd(f);
	}
}


好的,这很有利于我们增加菜单,扩展产品的种类,一个工厂专注于一个产品类。



您的顾客为上帝的理念成功让您的食品店称霸当地,您成为了当地的快餐零售业的模范人物。

但是您的理想紧紧只是想当一个地方的土皇帝,还是想走出去,称霸全球呢。您需要面临的决策:

A:我们的业务蒸蒸日上,钱多到没处花了,开几家连锁吧,我们要去开别的地方的连锁店。然后赚更多的钱,让每一个地方都有我们的产品。

B:管他呢,反正我们现在已经是这片苞米地的王了。GG,您的食品店因为其他的连锁店(因为他们品牌大,名气大,口碑好,所以顾客都选择)的进入而业务紧缩,不久就关门。请大侠重新来过。


如果你仍然选择A,那么恭喜你,你很快就能称霸整个中华了。也就能学到本部分最后一个单元的内容:抽象工厂设计模式。

我们的食品连锁店是开在南京的,但是我们下一步需要去北京扩展业务。假设现在产品种类已经固定,你可能会照搬现有的店,但是那的口味和我们这里的口味不一样:南京地方风味的薯条,汉堡,炸鸡,北京地方风味的薯条,汉堡,炸鸡。

好的 这样咋们由多处了三条产品线。但是如果我们要开往全国各地,那么产品线就会不受节制的膨胀了。

好的。这样我们可以考虑一个问题,既然南京只做,南京风味的所有汉堡,北京只做北京地方的所有汉堡,那么我们是不是可以按照地区划分我们的食品线职能,南京的食品线,这次要做南京风味的薯片,汉堡,炸鸡。北京的食品线,要做北京风味的薯片,汉堡,炸鸡了。


多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
一个抽象工厂类,可以派生出多个具体工厂类。 
 每个具体工厂类可以创建多个具体产品类的实例。

这一次,我们的抽象工厂类大概是这样的:

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

interface KGFFoodLine {
	public Food cookChip();

	public Food cookHamberger();

	public Food cookChicken();
}

实现工厂类是这样的:

class BeijingFoodLine implements KGFFoodLine {

	@Override
	public Food cookChip() {
		return new Chip("Beijing Chip");
	}

	@Override
	public Food cookHamberger() {
		return new Hamburger("Beijing Hamberger");
	}

	@Override
	public Food cookChicken() {
		return new Chicken("Beijing Chicken");
	}
}

class NanjingFoodLine implements KGFFoodLine {
	@Override
	public Food cookChip() {
		return new Chip("Nanjing Chip");
	}

	@Override
	public Food cookHamberger() {
		return new Hamburger("Nanjing Hamberger");
	}

	@Override
	public Food cookChicken() {
		return new Chicken("Nanjing Hamberger");
	}
}
现在我们来开张了:

public class AbstractFactory {
	public static void main(String[] args) {
		// 这次我们在南京 应该吃到南京的特色薯条,汉堡和炸鸡。
		KGFFoodLine foodLine = new NanjingFoodLine();
		Customer c = new Customer();
		c.eatFood(foodLine.cookChip());
		c.eatFood(foodLine.cookHamberger());
		c.eatFood(foodLine.cookChicken());
	}
}




关于工厂方法和抽象工厂方法的区别:

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品),我们只要不断的开辟产品线了就行了。 

抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族),每一个工厂,只生产该工厂系列的产品。

总结来说工厂方法和抽象工厂方法:一个是真的工厂,生产各种个样的产品,而抽象工厂则更像是产品线,只生产一个系列的产品。如果需要替换部分产品,那么使用工厂方法吧,如果要整个产品线都换掉,那么就使用抽象工厂设计模式。

这两种方式的侧重纬度不同。一个侧重于产品种类,一个侧重于产品系列。

打个比方吧:

我们是苹果直接供货商,我们只生产苹果手机,但是我们生产苹果手机的各个配件,然后可以组装成一个完整的苹果的手机。

我们是苹果的外包,我们同时也接受三星的供货要求,我们既要生产苹果的配件,也要生产三星的配件,但是你随便各个部分找个零件能不能组装厂三星的手机 或者是苹果的手机 这个要看你运气了。我们什么都生产。



这里我们再看看spring中的工厂模式:

BeanFactory接口:

public interface BeanFactory {

	String FACTORY_BEAN_PREFIX = "&";

	Object getBean(String name) throws BeansException;

	<T> T getBean(String name, Class<T> requiredType) throws BeansException;

	<T> T getBean(Class<T> requiredType) throws BeansException;

	Object getBean(String name, Object... args) throws BeansException;

	<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

	boolean containsBean(String name);

	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

	boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

	boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

	boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

	Class<?> getType(String name) throws NoSuchBeanDefinitionException;

	String[] getAliases(String name);

}

我们BeanFactory只定义了getBean()这个接口,我们知道Spring 只要写进配置注册了的bean 不管你是什么类型,都可以制造出来,才不管搭不搭配呢。所以这里应该是采用了工厂方法的设计模式。值得一提的是该借口定义了一个常量FACTORY_BEAN_PREFIX = "&", 其实就是说 我们如果手动定义了一个工厂产生bean,那么如果要获得该工厂的实例,那么我么需要使用前缀 "&"符号就可以了。

《MATLAB项目实战》,专栏目录和介绍 MATLAB 是一款强大且广泛应用的数值计算和数据可视化软件工具,它提供了一个高效、简洁的编程环境,使用户能够进行从简单的矩阵运算到复杂的多维数据分析的各种计算任务。无论是在人工智能、计算机视觉、图像处理还是其他领域,MATLAB 都能够提供精准、快速的解决方案,因此成为了全球科研人员、工程师以及数据分析师的得力工具。 阅读详情

相关推荐

【理论&实战篇】大模型RAG技术详解(一)-基础篇

RAG的初衷是为了增强大模型的事实性、时效性,减少幻觉,引入专业知识优化生成回复,是一种结合了信息检索技术与语言生成模型的人工智能技术。通过,并将其作为提示(Prompt)输入给大模型(LLM),来。

qq_41375680的博客 374

设计模式之抽象工厂模式,用简单工厂来改进抽象工厂以及反射+抽象工厂的数据访问程序

当设计到多个产品系列的问题时使用抽象工厂模式; 抽象工厂的优缺点不想提,总之我基本不会去用,扩展起来太tm愁人了,增加一个产品要至少增加三个类,修改三个工厂类,之前搞过一次差点烦死我,哎,都怪学艺不精啊~~ OK上代码: 这里建立一个用户表,提供insert和get的功能。建立用户的接口,实现接口。 class User { private int nid;...

流浪—到处搬砖的博客 321

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析

本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。

motor的博客 1079

项目优化--从工厂方法到抽象工厂

前言

No body But u 389

揭秘大型语言模型:从神经元到思维透明的奇妙旅程

这篇博客带你走进大型语言模型的内部世界,从神经元的小任务,到功能向量的团队合作,再到层间的协作和思维的透明化。掌握这些知识,能让你在开发中更高效地优化AI,在研究中更深入地探索模型的奥秘。建议多动手实践,把这些理论变成自己的能力!

数据与算法架构提升之路专栏 1519

SolidWorks 小车底盘 装配体

通过制作小车底盘了解solidworks装配体的部分知识

及时总结 2226

简单工厂和工厂方法模式Java示例

简单工厂和工厂方法模式都是将对象的创建交由工厂处理,运用了工厂方法模式,我们代码中的if else被不同类型的具体工厂类所取代,这样在增加新的产品的时候不用修改原来的代码, 增加了可维护性。 当然这样做的后果就是项目中多了很多的类和接口, 增加了系统复杂性。简单工厂中的角色包括: 角色 ...

chuifuhuo6864的博客 163

【硬刚Hive】HIVE基础(20):Hive函数(9) over 窗口函数

欢迎关注博客主页:微信搜:import_bigdata,大数据领域硬核原创作者_王知无(import_bigdata)_优快云博客 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 优快云博客!本文首发优快云论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hive部分补充。 hive窗口函数语法 在前言中我们已经说了avg()、sum()、max()、min()是分析函数,而over()才是窗..

微信搜:import_bigdata,大数据领域硬核原创作者 888

设计模式---简单工厂模式 vs 工厂方法模式 vs 抽象工厂模式

这个是一直都不是很了解的两个设计模式已经他们之间的区别。 简单工厂模式 百度: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。 菜鸟教程: 应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽

yez_yez的博客 199

骑砍Ⅱ霸主MOD开发(5)-2D界面

本文介绍了2D界面开发的技术框架,主要包括以下内容: 2D界面架构:由多个GauntletLayer(菜单/对话框/定制页面)和SceneLayer(3D页面)组成,支持屏幕切换和管理。 GauntletLayer实现:采用Movie(HTML页面)+ViewModel(动态数据)模式,支持优先级管理、焦点控制和事件响应。 2D控件系统:包括颜色字体、坐标布局、背景图(Sprite/Texture)等配置方式,支持自定义控件开发。 定制化页面开发:详细说明了游戏菜单和对话框的实现方法,包括状态管理、事件回调

骑砍战团&霸主MOD开发 1181

小波变换完全指南:从原理到实践的深度解析

在信号处理领域,傅里叶变换长期以来一直是频域分析的主要工具。然而,傅里叶变换存在一个根本性的局限:它只能告诉我们信号中包含哪些频率成分,却无法告诉我们这些频率成分在什么时刻出现。这就像是你知道一首歌用了哪些音符,却不知道这些音符的演奏顺序。小波变换(Wavelet Transform) 应运而生,它完美地解决了这个问题。小波变换不仅能够提供频率信息,还能同时提供时间信息,实现了信号的时频联合分析。本文将带你从零开始,深入理解小波变换的原理、实现和应用。傅里叶变换的定义如下: 它使用正弦和余弦这样的全局基函数

电脑管家 209

设计模式之简单工厂-工厂方法-抽象工厂Factory Pattern-Java版

一、简单工厂 简单工厂不是一个设计模式,但是可以使客户端从依赖具体实现中解耦出来。 例子:披萨店有多种不同的披萨,下列代码表示了生产披萨的过程: public class PizzaStore{ Pizza orderPizza(String type){ Pizza pizza=null; if("cheese".equals(type)){ pizza=new CheesePizza(); } else if("pepperoni".equals(type)) { pizza=

qianmojl的博客 208

SPSS 多重共线性问题:编程解决方案

多重共线性会导致回归模型的不稳定性,使得估计的回归系数失去解释力,降低模型的准确性和可靠性。通过执行这些代码,你将能够计算和查看VIF和CI的结果,并确定是否存在多重共线性问题。上述代码执行了一个回归分析,其中A是我们感兴趣的因变量,B、C、D和E是我们要检查的自变量。接下来,我们将执行多重共线性的检测。通过执行上述代码,你将能够看到每个自变量的VIF和CI值,以及预先设置的阈值。上述代码将计算VIF和CI的值,并将结果写入指定路径的结果文件中。接下来,我们可以使用以下代码来计算和显示VIF和CI的值。

CyberGenius的博客 1426

从DRP架构进行简单工厂代替抽象工厂的SWOT分析

一、前情回顾1、简单工厂 VS 工厂方法VS抽象工厂: [简单工厂 VS 工厂方法VS抽象工厂](http://blog.youkuaiyun.com/wangyy130/article/details/24867685) 2、设计模式总结 : [设计模式总结](http://blog.youkuaiyun.com/wangyy130/article/details/25273161)其实在之前刚接触设计模式的时候,对于

littlecolor 1518

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

设计模式——抽象工厂模式

阅读目录 使用频率:★★★★★ 一、什么是抽象工厂模式 二、补充说明 三、角色 四、例子 使用频率:★★★★★ 一、什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位); 例如:生产一台PC机,使用工厂方法模式的话,一般会有cpu工厂,内存工厂,显卡工厂...但是使用抽象工厂模式的话,只有一个工厂就是PC工厂,但是一个PC工厂涵盖了cpu工厂,内存工厂,显卡工厂等要做的所有事; 二、补充说明 注意这里的“相同主题”的概念,表示的是同一个产品族,不能

菜园子丶For丨丶Tomorrow的博客 141

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java web简单工厂模式_简单工厂和工厂方法模式Java示例

版权声明:此文章转载自_infocool原文链接:http://www.infocool.net/kb/Java/201610/204014.html如需转载请联系听云College团队成员小尹 邮箱:yinhy#tingyun.com简单工厂和工厂方法模式都是将对象的创建交由工厂处理,运用了工厂方法模式,我们代码中的if else被不同类型的具体工厂类所取代,这样在增加新的产品的时候不用修改原来...

weixin_36282765的博客 211

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity学习笔记:设计模式-工厂 抽象工厂

多选一 功能:据不同的条件产生不同的对象 这些不同的对象类型不同,却具有共同的父类 案例↓(去餐馆 选择吃的) 工厂类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace dp1_FactoryMethod { ...

自闭的饭盒 266

DP-抽象工厂模式

抽象工厂模式 抽象工厂模式是在工厂模式的基础上增加的一层抽象概念。如果比较抽象工厂模式和工厂模式,我们不难发现前者只是增加了一层抽象的概念。抽象工厂是一个父类工厂,可以创建其它工厂类。故我们也叫它“工厂的工厂”。 以电脑组装为例,对于装机工程师而言,他只知道组装一台电脑,需要相应的配件,但是具体使用什么样的配件,还得由客户说了算。也就是说装机工程师只是负责组装,而客户负责选

mfcSmile的专栏 889

DP讨论——工厂模式

工程模式有3个,简单工厂模式,工厂方法模式和抽象工厂模式。

huibin.yun的博客 352

java工厂方法_Java之工厂方法

普通工厂模式:第一步:定义接口,坚持面向接口编程,package dp;public interface Sender{public void send();}第二步:实现接口:package dp;public class MailSender implements Sender{public void send(){System.out.println("This is a mailsende...

weixin_31517321的博客 492

抽象工厂(Abstract Factory)

摘自:http://www.vincehuston.org/dp/abstract_factory.html翻译如下,有错之处请指出定义:1.抽象工厂只提供了一个创建产品族的接口,而不需要直接指明已实现的类。产品族:每一个族中的产品必须具有相互关联或依赖的关系(这样才能对这些产品定义一个公共接口,相应具有了多态性).  抽象工厂包含许多族(能产生相应产品的接口或方法)。然后在派生出

绿色空间---飞鹰的专栏 342

php 抽象工厂模式 反射机制,设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory),是23种设计模式之一。DP中是这么定义抽象工厂模式的:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。在学习抽象工厂模式之前,最好熟悉简单工厂模式以及工厂方法模式,这样对理解抽象工厂模式会有一定帮助,而且抽象工厂也是基于工厂方法模式的。至于工厂是用来干什么的,我这里也不过多介绍了...

weixin_42339883的博客 235

java反射 抽象工厂_抽象工厂加反射(一)

为什么使用抽象工厂+反射:抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂编程:是完全依靠接口编程,不需要具体的实现类。抽象工厂与OCP原则增加新的产品族时,需要增加具体工厂类,符合OCP原则。增加新产品时,需要修改具体工厂类和增加产品类,不符合OCP原则抽象工厂加反射:将抽象工厂提供的一系列接口,通过读取配置文件,进行实例反射,根据实例化要求去实例化类。配置...

weixin_29291863的博客 372

(五)JAVA设计模式——抽象工厂模式案例实现

抽象工厂模式

厉害哥哥的博客 1746

手撸设计模式之-工厂模式

手撸设计模式之-工厂模式工厂模式的历史由来简单工厂模式工厂方法模式抽象工厂模式总结 工厂模式的历史由来 在现实社会上我们都知道,有一种企业叫工厂,在原始社会自给自足(没有工厂)、后来通过迭代进化到农耕文化社会(简单工厂,民间酒坊)、工业革命社会出现了流水线(工厂方法,自产自销)、现代产业链代工厂(抽象工厂,富士康)等。 下面我开始由简到繁以次介绍相关工厂。 简单工厂模式 简单工厂(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例对象。简单工厂适用于工厂类

以梦为马,不负韶华 860

【设计模式】抽象工厂模式

使用频率:★★★★★ 一、什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位); 例如:生产一台PC机,使用工厂方法模式的话,一般会有cpu工厂,内存工厂,显卡工厂...但是使用抽象工厂模式的话,只有一个工厂就是PC工厂,但是一个PC工厂涵盖了cpu工厂,内存工厂,显卡工厂等要做的所有事; 二、补充说明 注意这里的“相同主题”的概念,表示的是同一个产品族,不能将cp...

疯一样的码农 108
上一篇: [DP]Desigin Pattern Overview
下一篇: [DP]Builder设计模式
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值