工厂方法模式

工厂方法模式

你说的曾经没有我的故事 提交于 2020-02-08 18:45:31
工厂方法模式 概念 简单工厂模式已经了解过了,它的缺点也很明显:违背开闭原则,容易造成Factory类复杂度过大。工厂方法模式可以适当解决这些问题。 定义:工厂方法模式(Factory Method Pattern),定义一个创建对象的接口,让其子类来创建对象。结构图如下: 实例 下面让我们将简单工厂中的例子改写下,将GirlFactory改为接口,额外添加三个工厂类。 123456789101112131415161718192021222324252627 public interface { public Girl createGirl();}public class XiaoCaoFactory implements { public Girl createGirl() { Girl xiaoCao = new XiaoCao(); return xiaoCao; }}public class XiaoHuaFactory implements { public Girl createGirl() { Girl xiaoHua = new XiaoHua(); return xiaoHua; }}public class XiaoYeFactory implements { public Girl createGirl() { Girl xiaoYe = new

设计模式常见面试题汇总

北战南征 提交于 2020-02-07 14:07:54
设计模式常见面试题汇总 1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。 **分类** **包含** **关注点** 创建型模式 工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式 关注于对象的创建,同时隐藏创建逻辑 结构型模式 适配器模式、过滤器模式、装饰模式、享元模式、代理模式、外观模式、组合模式、桥接模式 关注类和对象之间的组合 行为型模式 责任链模式、命令模式、中介者模式、观察者模式、状态模式、策略模式、模板模式、空对象模式、备忘录模式、迭代器模式、解释器模式、访问者模式 关注对象之间的通信 下面会对常用的设计模式分别做详细的说明。 2.什么是单例模式? 答:单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例。 优点:不会频繁地创建和销毁对象,浪费系统资源。 使用场景:IO 、数据库连接、Redis 连接等。 单例模式代码实现: class Singleton { private static Singleton instance = new Singleton(); public

23种设计模式

女生的网名这么多〃 提交于 2020-02-06 02:57:58
23种模式java实现源码 收集五年的开发资料下载地址 : http://pan.baidu.com/share/link?shareid=3739316113&uk=4076915866#dir/path=%2Fstudy 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

设计模式(Design Patterns)

和自甴很熟 提交于 2020-02-06 01:41:11
设计模式(Design Patterns) 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式 ,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式 ,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式 ,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类: 并发型模式和线程池模式 。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用

抽象工厂和工厂设计模式之间有什么区别?

三世轮回 提交于 2020-02-05 21:37:48
我知道有很多关于这两种模式之间差异的帖子,但有一些我找不到的东西。 从我一直在阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是从客户端隐藏实现,因为他们将看到通用产品。 我的第一个问题是抽象工厂。 它的作用是允许您创建具体对象系列(可能取决于您使用的特定工厂)而不仅仅是单个具体对象? 抽象工厂是否只返回一个非常大的对象或许多对象,具体取决于您调用的方法? 我的最后两个问题是关于我在很多地方看到过的单一引言,我无法完全理解: 两者之间的一个区别是,使用抽象工厂模式,类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化。 我的理解是工厂方法模式有一个Creator接口,它将使ConcreteCreator负责知道要实例化的ConcreteProduct。 这是通过使用继承来处理对象实例化的意思吗? 现在关于那个引用,抽象工厂模式究竟是如何通过合成将对象实例化的责任委托给另一个对象? 这是什么意思? 看起来抽象工厂模式也使用继承来完成构建过程,但是我仍然在学习这些模式。 任何帮助,尤其是最后一个问题,将不胜感激。 #1楼 AbstractFactory和Factory设计模式之间的区别如下: Factory Method 仅用于创建一个产品,但 Abstract Factory 用于创建相关或依赖产品的族。

类创建型模式之工厂方法(Factory Method)

本小妞迷上赌 提交于 2020-02-04 07:16:05
类创建型模式之工厂方法(Factory Method) 一、创建型模式概述 创建型模式(Creational Pattern)抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。 创建型模式分为类的创建模式和对象的创建模式两种: 类的创建模式:类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息,并且隐藏了这些类的实例是如何被创建和放在一起的。 对象的创建模式:对象的创建模式把对象的创建过程动态地委派给另一个对象,从而动态地决定客户端将得到哪些具体类的实例,以及这些类的实例是如何被创建和组合在一起的。 二、工厂方法介绍 (1)意图 工厂方法(Factory Method)模式是类的创建模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。 (2)别名 工厂方法又称为虚构造器( Virtual Constructor)。 (3)动机 如图中所示,Application的子类重定义Application的抽象操作CreateDocument以返回适当的Document子类对象,一旦一个Application子类实例化后,它就可以实例化与应用相关的文档,而无需知道这些文档的类,我们称CreateDocument是一个工厂方法,因为它负责“生产一个对象”。 在工厂方法模式中

创建型模式应用实验

家住魔仙堡 提交于 2020-02-03 18:58:59
创建型模式(Creational Pattern)的主要特点是将对象的创建与使用分离,根据对象的创建与组合方式的不同,创建型模式可分为单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式 5 种。 本实验的主要目的如下。 了解 5 种“创建型模式”的定义、特点和工作原理。 理解 5 种“创建型模式”的结构、实现和应用场景。 学会应用 5 种“创建型模式”进行软件开发。 实验原理1. 创建型模式的工作原理 创建型模式隐藏了对象的创建细节,对象的创建由相关的工厂来完成,使用者不需要关注对象的创建细节,这样可以降低系统的耦合度。创建型模式共 5 种,它们分别是 单例模式 、 原型模式 、 工厂方法模式 、 抽象工厂模式 和 建造者模式 ,其工作原理在各自的教程中也都有详细的介绍,每种模式的实验大概要花 2 个学时,大家可以根据实验计划来选做若干个实验,下面以工厂方法模式为例,介绍其实验过程。 2. 工厂方法模式的工作原理 工厂方法模式(Factory Method Pattern),也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。 在工厂方法模式中

设计模式:抽象工厂模式(Abstract Factory)

我怕爱的太早我们不能终老 提交于 2020-01-26 05:27:04
在设计原则中有这样一句话“我们应该针对接口编程,而不是正对实现编程”。但是我们还是在一直使用new关键字来创建一个对象,这不就是在针对实现编程么? 针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。入股代码是针对接口而写,那么可以通过多态,它可以与任何新类实现该接口。但是,当代码使用一大堆的具体类时,等于是自找麻烦,因为一旦加入新的具体类,就必须要改变代码。在这里我们希望能够调用一个简单的方法,我传递一个参数过去,就可以返回给我一个相应的具体对象,这个时候我们就可以使用简单工厂模式。 一、基本定义 简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。 二、模式结构 模式结构图如下: 模式分析: Factory:工厂角色。专门用于创建实例类的工厂,提供一个方法,该方法根据传递的参数不同返回不同类的具体实例。 Product:抽象产品角色。为所有产品的父类。 ConcreteProduct:具体的产品角色。 简单工厂模式将对象的创建和对象本身业务处理分离了,可以降低系统的耦合度,使得两者修改起来都相对容易些。当以后实现改变时,只需要修改工厂类即可。 三、简单工厂模式实现 模式场景:在一个披萨店中,要根据不同客户的口味,生产不同的披萨

你还在看错误的抽象工厂模式实现案例?

跟風遠走 提交于 2020-01-26 04:50:28
昨天在搜抽象工厂模式时,发现有好几篇博文讲的实现方式和我所认知的有出入,而且还看到某某教程讲的也是错误的还在搜索引擎排第一。 大家讲的简单工厂模式和工厂方法模式都是没问题的,关键到抽象工厂模式就不对了。 先从简单工厂模式和工厂方法模式复习一下,然后再看看错的是咋讲的。已经对抽象工厂模式烂熟于心的请忽略此文。 简单工厂模式: 有个一公共的产品接口,定义一些方法,各个具体的产品类都实现这个接口,然后有一个专门生产产品类实例的类被称作工厂类,专门为客户端生产产品实例,这个工厂的内部实现就是使用switch或ifelse进行逻辑判断实现的,根据客户端传递的参数不同,来决定什么时候创建什么样的具体产品,生产出不同的具体产品返回给客户端。这样,这个工厂类就集成了所有产品的创建逻辑,它变得无所不知,这也让它变成了核心。但这也成为了他的缺点,因为它将所有的逻辑集中放在一个类里,当产品接口有了新的产品实现类,工厂类需要增加代码,判断在什么时候创建该产品,就需要加入新的判断逻辑。 ShoesFactory工厂 public class ShoesFactory{ public static final String NIKE = "NIKE"; public static final String ADIDAS = "ADIDAS"; public static Shoes getShoes

java设计模式简单归纳

谁说我不能喝 提交于 2020-01-25 12:16:53
1工厂模式:用来创建单一产品( 生产产品的接口只有一个方法 通过不用的实现生产不同的产品) 用统一接口来完成生产类的方法 具体对象通过具体实现类来产生 类对象的方法也可以用接口定义 具体功能也是通过具体实现类产生 2抽象工厂模式:和工厂模式的区别就是用来创建多个产品(生产产品的接口可以有很多方法 每一个来生产不同的产品 不同的实现类区别在于各个产品又有不同分类) 3单利模式: 懒汉:原始标准版 —》syncronized同步式-------》双重检查机制 且变同步方法为代码块锁 静态内部类: 利用了类加载机制来保证类初始化时候只有一个单例,线程安全的且没有性能损耗 饿汉式: 浪费资源 因为一旦类的其他静态方法 方法被使用或者类加载了 即使没有用到单例也会创建 特殊饿汉式---注册登记式 存放在ConcurrentHashMap中 枚举单例: 可以防止同步问题和反序列化 4 来源: CSDN 作者: javHao 链接: https://blog.csdn.net/weixin_40695328/article/details/104072058