抽象工厂模式

抽象工厂模式

隐身守侯 提交于 2019-12-14 05:40:33
前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。 同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。 本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。 图1 电器工厂的产品等级与产品族 模式的定义与特点 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 使用抽象工厂模式一般要满足以下条件。 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。 系统一次只可能消费其中某一族产品,即同族的产品一起使用。 抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下。 可以在类的内部对产品族中相关联的多等级产品共同管理

课程总结

吃可爱长大的小学妹 提交于 2019-12-13 11:53:57
一.认识JAVA (1)以前对java一点认识都没有,通过书本简单的了解了java的发展过程,还有他的开发工具JDK的发展历程,了解到java的开发放心,java语言的特点,可移植性、面向对象、解释型、多线程处理能力、安全性。 Java程序的运行机制和Java虚拟机,Java中所有程序都是在JVM上运行的,所有的class文件都是在JVM上运行。知道如何搭建Java开发环境,知道JDK的安装与配置,实现了第一个Java程序,了解到了classpath属性的作用,path是操作系统的环境属性,指的是可以执行命令的程序路径。classpath是所有*.class文件执行的路径,Java命令执行时将利用此路径加载所需要的*.class文件 知道Java程序如何注释,在要注释的内容开头用/*标明,结尾用/*标明,认识Java中的标识符,标识符不能以数字开头,也不能是Java中的保留关键词,了解到了Java当中的关键词,变量跟常量的声明 二.面向对象的基本概念 (1)对于面向对象的程序设计有三个主要特征:封装性,继承性,多态性。 封装性 为属性封装:private 属性类型 属性名称; 为方法封装:private 方法返回值 方法名称(参数列表){} 构造方法 1.构造方法的名称必须与类名称一致 2.构造方法的声明处不能有任何返回值类型的声明 3.不能再构造方法中使用return返回一个值

Java设计模式之工厂模式

坚强是说给别人听的谎言 提交于 2019-12-13 11:33:29
文章目录 一、简单工厂模式 1.概述 2.实现 二、工厂方法模式 1.简述 2.实现 三、抽象工厂模式 1.概述 2.实现 三、总结 1.工厂模式优点 2.工厂模式适用场景 3.三种模型的区别 一、简单工厂模式 1.概述 简单工厂模式也叫静态工厂模式,将所有的创建对象任务交给了一个工厂类来实现,要想使用对象,直接找工厂类即可。 以动物工厂类为例,可以将创建动物对象的任务全放在动物工厂类来实现,在动物工厂类中定义静态方法,根据传递不同的参数类创建不同的动物对象。 要素分析: 定义抽象类:动物具有共同的属性:吃,因此可以创建一个动物抽象类,定义“吃”的抽象方法 定义具体的操作类:动物有很多,以猫和狗为例,创建猫类和狗类,继承动物类,实现“吃”的抽象方法 定义简单工厂:根据传递不同的参数类创建不同的动物对象 测试类:调用工厂类创建对象 2.实现 1.定义抽象类 public abstract class Animal { public abstract void eat ( ) ; } 2.定义具体的操作类 public class Cat extends Animal { public void eat ( ) { System . out . println ( "猫吃鱼" ) ; } } public class Dog extends Animal { public void

JavaScript 面向对象编程

不打扰是莪最后的温柔 提交于 2019-12-12 19:54:05
JavaScript 面向对象编程 面向对象介绍 什么是对象 (1) 对象是单个事物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2) 对象是一个容器,封装了属性(property)和方法(method)。 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。 在实际开发中,对象是一个抽象的概念,可以将其简单理解为: 数据集或功能集 。 ECMAScript-262 把对象定义为: 无序属性的集合,其属性可以包含基本值、对象或者函数 。 严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都 映射到一个值。 提示:每个对象都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。 面向对象编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。

抽象工厂模式

蹲街弑〆低调 提交于 2019-12-11 02:33:37
抽象工厂模式 抽象工厂模式: 为创建一组相关或相互依赖的对象提供一个接口,而无需指定它们的具体类。 首先给出抽象工厂模式的通用类图: 在我第一次看到这个类图的时候,“我靠,这和工厂方法模式有啥区别,多了一个场景类Client?”。这个类图是《设计模式之禅》中的一张图,看完之后明白了这张图。 抽象工厂模式简单理解: 抽象工厂模式的工厂接口定义了“一组方法”,而工厂方法模式的工厂接口定义了“一个”方法。 (作为初学者,这样理解比较简单) 抽象工厂接口中的“一组”方法,用来创建定义中说的“一组”相关或相互依赖的对象 怎么理解相关和相互依赖呢?也可以简单的理解外在代码层面有关或无关的对象。代码层面无关,不代表它两真的无关。 举个栗子 假设有一个程序,其中包含了对文件的操作,假设当前的操作系统是windows,现在要将这个程序迁移到linux。如果使用抽象工厂模式,只需要修改工厂对象即可(如果写在配置文件中,只需要把工厂类的类名修改即可),如下图: package AbstractFactory; interface IOFactory { InputStream getInputStream(); OutputStream getOutputStream(); } interface InputStream { void write(); } interface OutputStream

Java设计模式之抽象工厂模式

爷,独闯天下 提交于 2019-12-09 14:01:29
抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法。通常,工厂模式的所有产品的创建都放在这个工厂里面,如果产品有所变更,则需要修改该工厂方法,违反了设计模式的开闭原则——对扩展开放,对修改关闭。而抽象工厂模式则认为当需要创建一个新的产品时,也创建一个新的工厂即可,不需要修改任何之前已有的代码。 抽象工厂案例图 从上图可以看出,如果要开发一个搜索的功能,而搜索功能又分为图片搜索和新闻搜索,图片搜索又可以再开发新功能,如风景图片搜索、明星图片搜索、动漫图片搜索;同样新闻搜索又可以再开发新功能,如文化新闻搜索、科技新闻搜索、经济新闻搜索。对于这样的一个强大的功能,可以使用抽象工厂模式,例如可以建一个搜索工厂,用于创建图片搜索和新闻搜索的接口,然后再定义两个小工厂,图片工厂和新闻工厂,实现搜索工厂这个接口,并且可以创建具体的搜索功能实例。 案例的具体代码实现 首先定义一个可搜索的接口,所有的被搜索对象均要实现这个接口,才可以被搜索到: package com.factory.abstractFactory; public interface Searchable { public void get(); } 定义搜索工厂接口,内部定义search()方法,任何一个子工厂都要实现该方法:

小菜学设计模式——抽象工厂模式

北城余情 提交于 2019-12-09 13:48:00
背景 简单工厂、工厂方法模式,接着必须学习抽象工厂模式 1、使用意图 扩展工厂方法模式 2、生活实例 淘宝电影、猫眼电影都能为我们生成当天各种电影票 3、Java 例子(框架、JDK 、JEE) 个人觉得实实在在的根据抽象工厂模式定义的类应该会很少,毕竟不方便扩展,虽然它是一种很了不起的思想。一般都会采用反射机制+抽象工厂完成,比如,JDBC模块,在使用DriverManger.getConnection 这一步之前,必须要先加载驱动,也就是 Class.forname(class);这里指定class,通过这一步就可以创建驱动实例,也就是通过反射和工厂模式为应用注入了对象;Spring 核心之一 IoC 采用的也是反射机制+工厂模式来完成。 4、模式类图 5、模式优点 抽象工厂模式:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们的具体类。 最大的优点是:容易交换产品系列,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置。 其次,他让具体创建实例过程与客户端分离,客户端是通过他们的抽象接口操作实例,产品的具体类别也被具体工厂实现分离,不出现在客户端代码中。 6、与类似模式比较 我们知道简单工厂模式(静态工厂模式)就是简单的把对象的创建过程移到了工厂当中

案例分析:设计模式与代码的结构特性

删除回忆录丶 提交于 2019-12-09 04:11:32
工厂方法模式 中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。 同种类称为同等级,也就是说: 工厂方法模式 只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。 本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。 图1 电器工厂的产品等级与产品族 模式的定义与特点 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 使用抽象工厂模式一般要满足以下条件。 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。 系统一次只可能消费其中某一族产品,即同族的产品一起使用。 抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下。 可以在类的内部对产品族中相关联的多等级产品共同管理

案例分析:设计模式与代码的结构特性

你离开我真会死。 提交于 2019-12-08 22:34:30
设计模式-工厂模式 意图 :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要解决 :主要解决接口选择的问题。 何时使用 :系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。 如何解决 :在一个产品族里面,定义多个产品。 关键代码 :在一个工厂里聚合多个同类产品。 应用实例 :工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用 OOP 的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。 优点 :当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 缺点 :产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码

案例分析:设计模式与代码的结构特性

百般思念 提交于 2019-12-08 20:37:31
一、设计模式简介   设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。   设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。 二、设计模式的分类   设计模式主要可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。   创建型模式包括:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。   结构型模式包括:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。   行为型模式包括:责任链模式、命令模式、解释器模式