德国汽车

创建型模式:抽象工厂

混江龙づ霸主 提交于 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,宝马模型

Java学习day23-工厂方法(FactoryMethod)

混江龙づ霸主 提交于 2020-03-21 12:02:33
一、工厂方法(FactoryMethod)   FactoryMethod模式是设计模式中应用最为广泛的模式,在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。FactoryMethod解决的就是这个问题,它通过面线对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。 实例: 具体实现:1.选创建一个宝马车的接口 package day15; /** * 宝马车的产品接口 * */ public interface BWM { //产品的信息介绍 //车的发动方式等等 void showInfo(); } /** * 构建具体的车的类 * */ class BWM3 implements BWM{ public void showInfo() { // TODO Auto-generated method stub System.out.println("这个是宝马三系车"); } } class BWM5 implements BWM{ public void showInfo() { // TODO Auto-generated method stub System.out.println("这个是宝马五系车"); } } class BWM7 implements BWM{ public void

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:用于规范每个工厂;

简单工厂模式

ⅰ亾dé卋堺 提交于 2020-02-07 17:58:00
简单工厂模式的目的主要是用来创建对象。工厂是对对象创建过程的封装,不需要使用者自己去创建对象了,工厂模式可以通过现实中的工厂来理解,比如我要一部车,你可以自己做(但是你不怎么想),也可以交给工厂给你做。工厂可以把这个事情做好,然后给你想要的车,前提是你要告诉工厂具体的产品名称,必要的参数等等。 如汽车厂(CarFactory)可以生产汽车(Car),包括就有宝马、奔驰、大众等等;通过对这些车抽象至都是“车”(Car)这个抽象的模型,这个汽车工厂当然可以制作很多种类,具体多少种得看当前这个车概念下有多少种车了(继承“车”这个模型的类的种类),当然也不一定全要生产(看具体这个工厂提供哪些了,CarFactory中能实例化多少种类)。 当我们想要一辆宝马,我们告诉工厂给我一辆宝马车,然后工厂会调用宝马车制造流水线制造它并提供给你,加入你说给我一辆自行车,不好意思,我们不生产(其实是自行车没有继承Car罢了)。具体代码如下所示(C#): /* *--------------------------------- *| All rights reserved. *| author: lizhanping *| version:1.0 *| File: SimpleFactory.cs *| Summary: *| Date: 2019/3/8 15:29:44 *--------------

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

会有一股神秘感。 提交于 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(); }

Python-浅析Python面向对象

拜拜、爱过 提交于 2020-02-01 13:23:43
Python同Java一样,都属于面向对象语言。 面向对象语言,可以创建类及对象的概念,万物皆对象。 类作为一种抽象的概念,可以视为一个通用的模板。 而对象则可视为实例化的类,是一个个的实体。 1 class Car: 2 """这是一个汽车类""" 3 def power(self): 4 print(f"汽车加速,我是{self.name}") 5 6 def stop(self): 7 print("汽车刹车") 8 9 10 sedan= Car() #创建Car类下的一个实例化对象sedan 11 sedan.name = "benz" 12 sedan.power() 13 sedan.stop() 我们首先创建了一个Car类,Car类中包含两个分别名为power和stop的方法,内容分别为输出“汽车加速”和“汽车刹车” 然后我们在下面创建了一个实例化的对象sedan,并且给对象赋予了一个属性name,值为benz 最后,调用类中的方法power()和stop() 输出结果如下 同时我们注意到,在调用对象的方法时,方法中会自动生成一个供调用的self参数 根据定义, 类中的每个实例方法的第一个参数都是self,它用于指向对象自身 再看实例 1 class Car: 2 """这是一个汽车类""" 3 def power(self): 4 print(f"汽车加速,我是

skoda fabia scout / rs2000

北战南征 提交于 2020-01-23 17:23:07
s 普通版车型的长宽高分别是4003*1642*1500mm, Fabia Scout 长宽高则分别达到了4031*1658*1541mm。195/55R15 http://219.141.229.198/ovehicle/queryOvehicle.jsp?page=1&param=svw7168 序号 车辆型号 生产企业名称 车辆名称 发动机型号 发动机生产厂 商标 阶段 车辆类别 公开日期 1 SVW7168TSD 上海大众汽车有限公司 轿车 CPJ 上海大众动力总成有限公司 斯柯达(SKODA) 5 轻型汽油车 2014-4-15 2 SVW7168TSD 上海大众汽车有限公司 轿车 CPJ 上海大众动力总成有限公司 斯柯达(SKODA) 5 轻型汽油车 2014-1-28 3 SVW7168PSD 上海大众汽车有限公司 轿车 CPJ 上海大众动力总成有限公司 斯柯达(SKODA) 5 轻型汽油车 2014-4-15 4 SVW7168PSD 上海大众汽车有限公司 轿车 CPJ 上海大众动力总成有限公司 斯柯达(SKODA) 5 轻型汽油车 2014-1-28 5 SVW7168NSD 上海大众汽车有限公司 轿车 CPJ 上海大众动力总成有限公司 斯柯达(SKODA) 5 轻型汽油车 2014-3-13 6 SVW7168NSD 上海大众汽车有限公司 轿车 CPJ

GOF23设计模式之工厂模式(factory)

ぐ巨炮叔叔 提交于 2019-12-22 00:10:11
一、工厂模式概述   实现了创建者和调用者的分离   (1)分类     ①简单工厂模式       虽然某种程度不符合设计原则,但实际使用最多。     ②工厂方法模式       不修改已有类的前提下,通过增加新的工厂类实现扩展。     ③抽象工厂模式       不可以增加产品,可以增加产品族。 二、不使用工厂模式时   1.创建一个汽车的接口 1 public interface Car { 2 void run(); 3 }   2.创建两个实现汽车接口的类: 1 public class Audi implements Car { 2 3 public void run() { 4 System.out.println("奥迪在跑..."); 5 } 6 7 } 1 public class Byd implements Car { 2 3 public void run() { 4 System.out.println("比亚迪在跑..."); 5 } 6 7 }   3.客户端创建实例: 1 public class Client { 2 3 public static void main(String[] args) { 4 Car c1 = new Audi(); 5 Car c2 = new Byd(); 6 7 c1.run(); 8 c2.run();

设计模式之工厂模式

独自空忆成欢 提交于 2019-12-14 19:23:44
一、简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类 实现汽车接口 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 ( "BMW" ) ) { return new BMW ( ) ; } else if ( name . equals ( "benz" ) ) { return new Benz ( ) ; } else { System . out . println ( "不好意思,这个品牌的汽车生产不了" ) ; return null ; } } } 测试类