奔驰

创建型模式:抽象工厂

混江龙づ霸主 提交于 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

设计模式实例(Lua)笔记之四(Builder 模式)

白昼怎懂夜的黑 提交于 2020-04-06 07:18:47
1.描写叙述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我“牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我我们公司制作了,只是这次又额外添加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都有客户自己控制,他想什么顺序就什么顺序,这个没问题吧?”。 看着老大殷切的目光,我还能说啥,肯定的点头,“没问题!”,加班加点做呗,“再苦再累就当自己二百五 再难再险就当自己二皮脸 与君共勉!”这句话说出了我的心声。 那任务是接下来,我们怎么做实现呢?首先我们想了,奔驰、宝马都是一个产品,他们有共同拥有的属性,牛叉公司关心的是单个模型,奔驰模型 A 是先有引擎声音,然后再启动;奔驰模型 B 呢是先启动起来,然后再有引擎声音,这才是牛叉公司要关关心的,那到我们老大这边呢,就是满足人家的要求,要什么顺序就立刻能产生什么顺序的模型出来,我呢就负责把老大的要求实现掉,并且还要是批量的,看不懂?没关系,继续看下去,首先由我生产出 N多个奔驰和宝马车辆模型,这些车辆模型的都有 run 方法,可是详细到每个模型的 run 方法可能中间的执行任务的顺序是不同的,老大说要啥顺序,我就给啥顺序,终于客户买走后仅仅能是既定的模型。先看类图: 凝视: main()。客户 CCarModel。产品模型 CBenzModel。奔驰模型 CBMWModel,宝马模型

PHP设计模式:抽象工厂

时光毁灭记忆、已成空白 提交于 2020-02-07 18:06:53
示例代码详见 https://github.com/52fhy/design_patterns 抽象工厂 抽象工厂(Abstract Factory)是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车、跑车、货车、客车,那么每一个工厂都要有创建轿车,货车和客车的方法。 在学习抽象工厂具体实例之前,应该明白两个重要的概念: 产品族 和 产品等级 。 产品等级:同一个产品的不同分类或者组成。 产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。 例如:汽车分奔驰、宝马,奔驰下面还有跑车、MINI车等等。其中奔驰就是产品族,跑车、MINI车是产品等级。 再例如:AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。而这两个家族都来自于三个产品等级:主板、芯片组、CPU。 抽象工厂是汽车生产工厂的抽象,工厂方法是一个汽车工厂里每种汽车型号的抽象;简单工厂和抽象工厂含义一样,只是产品型号是固定的。 应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。 抽象工厂UML图: 简单工厂需要有4个角色: Product接口类:用于定义产品规范,例如ProductA、ProductB,抽象工厂有多个Product接口类; 具体的产品实现,例如ProductA1、ProductA2; 抽象工厂类IFactory:用于规范每个工厂;

设计模式——简单工厂、工厂方法、抽象工厂

会有一股神秘感。 提交于 2020-02-07 17:57:05
简单工厂模式 /** * 汽车形状接口 */ public interface Car { /** * 显示汽车品牌方法 */ void showBrand(); } 定义一个统一汽车接口。 /** * 奔驰汽车 */ public class BENZCar implements Car{ @Override public void showBrand() { System.out.println("奔驰"); } } 定义不同品牌汽车去实现统接口。 /** * 宝马汽车 */ public class BMWCar implements Car { @Override public void showBrand() { System.out.println("宝马"); } } 定义一个工厂去生产汽车。 /** * 汽车工厂 */ public class CarFactory { /** * 根据汽车型号生产汽车 * * @param brand * @return */ public Car getCar(String brand) { if ("BENZ".equals(brand)) { //生产奔驰 return new BENZCar(); } if ("BMW".equals(brand)) { //生产宝马 return new BMWCar(); }

传值传址 结构体

微笑、不失礼 提交于 2020-01-19 01:00:11
传值 class Program { //传值 public void hs(int a,int b) { b = a + 10; } } static void Main(string[] args) { Program hanshu = new Program(); //传值:将变量名中存放的值进行传输 int x = 5; int y = 10; hanshu.hs(x,y); Console.WriteLine(y); }结果为10    传址class Program { //out 传址 public void hs1(int a, out int b) { b = a + 10; } static void Main(string[] args) { Program hanshu = new Program(); //传址:将这个变量名直接传输过去,若在另一边有负值情况,这边的值会发生变化 int x = 5; int y = 10; hanshu.hs1(x, out y); Console.WriteLine(y); Console.ReadLine(); }结果为15    结构体class Program { //结构体:自定义类型 值类型 //一组变量的组合 //需要定义的位置 class里面 main函数外面 //包含的变量可以是多种数据类型 /

从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 +"]"; } }

建造者模式

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