奔驰汽车

创建型模式:抽象工厂

混江龙づ霸主 提交于 2020-04-06 07:19:18
个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂。 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介绍 : Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。 (来自《设计模式之禅》) 今天讲的是抽象工厂模式,小伙伴可能有疑问,抽象工厂和工厂方法之间都有工厂,那肯定是有什么联系的,具体是什么关系呢?简单的说:工厂方法是在解决一个产品多个层级方面的事情;而抽象工厂致力于解决多个产品多个层级方面的事情。举个例子:汽车是由很多零件组成的,比如引擎、轮胎、方向盘等等。现在如果我们是轮胎生产方,要生产宝马轮胎和奔驰轮胎,要用工厂方法还是抽象工厂实现呢?答案是:工厂方法。轮胎是一个产品,宝马轮胎和奔驰轮胎是 2 个不同层级的轮胎,所以用工厂方法解决就足够。假如现在我们是汽车生产方,要生产宝马汽车和奔驰汽车,汽车又包含轮胎和方向盘等等,要用哪个来实现?既然是上面的是工厂方法,那这个就用抽象工厂,因为这涉及到多个产品(轮胎、方向盘等等)和 2

从BWM生产学习工厂模式

微笑、不失礼 提交于 2019-12-06 09:35:30
工厂模式应用非常之广,在 JDK 底层源码以及各大主流框架中随处可见,一般以 Factory 结尾命名的类,比如 Mybatis 中的 SqlSessionFactory , Spring 中的 BeanFactory 等,都是工厂模式的典型代表。 一、简单工厂模式 1.1 概念 简单工厂模式又称为静态工厂模式,属于设计模式中的创建型模式。简单工厂模式通过对外提供一个静态方法来统一为类创建实例,目的是实现类与类之间解耦:客户端不需要知道这个对象是如何被穿创建出来的,只需要调用简单工厂模式的方法来统一创建就可以了,从而明确了各个类的职责。 1.2 示例 简单工厂模式,以生产汽车轮胎为例。 1.2.1 实体类 轮胎通用属性 public class Tire { /** * 通用属性 */ private String common; } 奔驰车轮胎 包含通用属性外还有自己的特有属性 public class TireForBenz extends Tire{ Tire tire; /** * 特有属性 */ private String benz; public TireForBenz() { this.benz = "得到 Benz 轮胎"; } @Override public String toString() { return "["+this.benz +"]"; } }

创建类模式大PK

时光总嘲笑我的痴心妄想 提交于 2019-12-05 14:50:02
创建类模式包括工厂方法模式、 建造者模式、 抽象工厂模式、 单例模式和原型模式, 它们都能够提供对象的创建和管理职责。 其中的单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象, 原型模式是要求通过复制的方式产生一个新的对象, 这两个不容易混淆。 剩下的就是工厂方法模式、 抽象工厂模式和建造者模式了, 这三个之间有较多的相似性。30.1 工厂方法模式VS建造者模式工厂方法模式注重的是整体对象的创建方法, 而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象。 我们举个简单例子来说明两者的差异, 如要制造一个超人, 如果使用工厂方法模式, 直接产生出来的就是一个力大无穷、 能够飞翔、 内裤外穿的超人; 而如果使用建造者模式, 则需要组装手、 头、 脚、 躯干等部分, 然后再把内裤外穿, 于是一个超人就诞生了。 纯粹使用文字来描述比较枯燥, 我们还是通过程序来更加清晰地认识两者的差别。30.1.1 按工厂方法建造超人首先, 按照工厂方法模式创建出一个超人, 类图如图30-1所示。图30-1 按工厂方法建造超人类图中我们按照年龄段把超人分为两种类型: 成年超人(如克拉克、 超能先生) 和未成年超人(如Dash、 Jack) 。 这是一个非常正宗的工厂方法模式, 定义一个产品的接口, 然后再定义两个实现, 通过超人制造工厂制造超人。

建造者模式

喜夏-厌秋 提交于 2019-11-26 20:14:22
11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:“牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我们公司制作了,不过这次又额外增加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都由客户自己控制,他想什么顺序就什么顺序,这个没问题吧?” 看着老大殷切的目光,我还能说啥?非常肯定地点头,“没问题!”,加班加点做呗,“再苦再累就当自己二百五!再难再险就当自己二皮脸!与君共勉!”这句话说出了俺的心声。 那任务是接下来,又是一个时间紧,工程量大的项目,为什么是“又”呢?因为基本上每个项目都是如此,我该怎么来完成这个任务呢? 首先我们分析一下需求,奔驰、宝马都是一个产品,他们有共有的属性,牛叉公司关心的是单个模型的运行过程:奔驰模型A是先有引擎声音,然后再响喇叭;奔驰模型B是先启动起来,然后再有引擎声音,这才是牛叉公司要关心的,那到我们老大这边呢,就是满足人家的要求,要什么顺序就立马能产生什么顺序的模型出来,我就负责把老大的要求实现出来,而且还要是批量的,也就是说牛叉公司下单订购宝马A车模,我们老大马上就找我“生产一个这样的车模,启动完毕后,喇叭响一下”,然后我们就准备开始批量生产这些模型。由我生产出N多个奔驰和宝马车辆模型,这些车辆模型的都有run()方法,但是具体到每一个模型的run()方法中间的执行任务的顺序是不同的

设计模式---------工厂模式

爱⌒轻易说出口 提交于 2019-11-26 16:49:40
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 一、简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类 实现汽车接口: public interface Car { String getName(); } 奔驰类: public class Benz implements Car{ @Override public String getName() { return "Benz"; } } 宝马类: public class BMW implements Car { @Override public String getName() { return "BMW"; } } 简单工厂类: public class SimpleFactory { public Car getCar(String name){ if (name.equals("Benz")) return new Benz(); if (name.equals("BMW")) return new BMW(); else {