工厂方法模式

JAVA旅游(工厂方法模式)

人盡茶涼 提交于 2020-01-25 00:39:01
实现工厂方法模式的技术要点如下: · 工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。 · 工厂方法模式由抽象工厂角色、具体工厂角色、抽象产品角色和具体产品角色组成。 · 抽象工厂角色是工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口或者必须继承的父类,它由抽象类或者接口来实现。 · 具体工厂角色含有与具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。抽象产品角色是具体产品继承的父类或者是实现的接口,一般由抽象类或者接口来实现。 package JAVA_Project_01_05 ; /* 实现工厂方法模式的技术要点如下: · 工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。 · 工厂方法模式由抽象工厂角色、具体工厂角色、抽象产品角色和具体产品角色组成。 · 抽象工厂角色是工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口或者必须继承的父类,它由抽象类或者接口来实现。 · 具体工厂角色含有与具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。抽象产品角色是具体产品继承的父类或者是实现的接口

工厂方法模式

隐身守侯 提交于 2020-01-21 08:16:15
动机(Motivation): 在软件系统中,由于需求的变化," 这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口 。 如何应对这种变化呢?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖的对象"不随需求的变化而变化。 意图(Intent): 定义一个用户创建对象的接口,让子类决定实例哪一个类。Factory Method使一个类的实例化延迟到子类。 适用性: 1. 当一个类不知道它所必须创建的对象类的时候。 2.当一个类希望由它子类来指定它所创建对象的时候。 3.当类将创建对象的职责委托给多个帮助子类中的某个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 具体实现在跳转页的下方,写了从简单工厂到工厂模式的演变,每个方法都需要学习,下方只是给出了工厂模式。(可以使工厂类进行封装) #region 创建接口 interface Sender { void send(); } //工厂接口 interface IProduce { Sender produce(); } #endregion #region 实现类 class MailSender : Sender { public void send() { Console.WriteLine("this is Mail"); } } class SmsSender :

工厂方法模式(Factory Method)

六月ゝ 毕业季﹏ 提交于 2020-01-19 13:25:01
一、 普通工厂模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: package test.factory; public interface Sender { public void Send(); } 其次,创建实现类: 邮件实现类 package test.factory; import lombok.extern.slf4j.Slf4j; @Slf4j public class MailSender implements Sender{ @Override public void Send() { log.info("this is mail"); } } 短信实现类 package test.factory; import lombok.extern.slf4j.Slf4j; @Slf4j public class SmsSender implements Sender { @Override public void Send() { log.info("this is sms"); } } 最后,建工厂类: package test.factory; import lombok.extern.slf4j.Slf4j; @Slf4j public class

代理模式和工厂方法模式

孤街浪徒 提交于 2020-01-15 07:32:41
1、代理模式 根据大话设计模式的例子 没有经过代理的代码: //SchoolGirl,被追求者类 public class SchoolGirl { private String name ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } } //追求者类 public class Pursuit { SchoolGirl schoolGirl ; public Pursuit ( SchoolGirl schoolGirl ) { this . schoolGirl = schoolGirl ; } public void GiveDolls ( ) { System . out . println ( schoolGirl . getName ( ) + "送你洋娃娃" ) ; } public void GiveFlowers ( ) { System . out . println ( schoolGirl . getName ( ) + "送你鲜花" ) ; } public void GiveChocolate ( ) { System . out . println ( schoolGirl .

工厂方法模式

做~自己de王妃 提交于 2020-01-15 01:54:48
个人博客 http://www.milovetingting.cn 工厂方法模式 模式介绍 工厂方法模式是创建型设计模式之一。 模式定义 定义一个用于创建对象的接口,让子类决定实例化哪个类。 使用场景 在任何需要生成复杂对象的地方,都可以使用工厂方法模式。用new就可以完成创建的对象无需使用工厂方法模式。 简单实现 定义抽象类Product public abstract class Product { /** * 抽象方法,具体由子类实现 */ public abstract void method(); } 定义实现类ProductA,ProductB public class ProductA extends Product { @Override public void method() { System.out.println("productA:method"); } } public class ProductB extends Product { @Override public void method() { System.out.println("productB:method"); } } 定义抽象工厂Factory public abstract class Factory { /** * 抽象工厂方法,具体由子类实现 * * @return */

工厂方法模式

这一生的挚爱 提交于 2020-01-14 18:54:12
目录 工厂方法模式 1.定义 2.为什么使用工厂方法模式 3.如何实现 4.工厂模式在Java中的应用 工厂方法模式 1.定义 工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 2.为什么使用工厂方法模式 基于简单工厂模式,如果新增了产品类,同时就要在工厂类中新增逻辑判断,修改原有的类。这样就违背了开放-封闭原则。-------见设计模式 如果产品类越来越多,那么就会造成工厂类的臃肿。 正是因为工厂类的设计违背了“开放--封闭”原则,所以才会导致新需求到来后修改导致的臃肿。 既然是这个工厂类与分支耦合,那么我们就对它下手, 根据依赖倒转原则我们就把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后,所有要生产具体类的工厂,就去实现这个接口。 这样,一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂。 我们需要新增功能时,就不用修改原有的工厂类了,只需要增加此功能的类和相应的工厂类就可以了。 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现产品类,选择判断的问题还是会存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂的,而现在是修改客户端。 总结: 1.工厂方法模式其实就是:针对简单工厂模式违背“开放--封闭”原则的地方

【设计模式】工厂方法

最后都变了- 提交于 2020-01-11 18:21:13
工厂方法 工厂方法 ,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法是简单工厂的延申。 在简单工厂中,如果想要添加新的产品,那么首先需要添加的一个具体产品类,在之后需要改变工厂类里的switch语句,添加判断。这样就发现,将写好的类更改了,这样其实 违反了开闭原则 。 为了对其进行修正,采取了工厂方法的模式。将工厂也进行抽象,其下面也有继承的具体工厂类,每个工厂类对应一个具体产品的生产。 当然工厂方法的 缺点 也很明显,每加一个产品,就要加一个对应的工厂,增大的开发量。 所以到底是使用简单工厂还是工厂方法,还是需要视情况而定。 来源: https://www.cnblogs.com/LampsAsarum/p/12180585.html

工厂方法模式

血红的双手。 提交于 2020-01-08 10:36:03
8.1 女娲造人的故事东汉《风俗通》 记录了一则神话故事: “开天辟地, 未有人民, 女娲搏黄土做人”, 讲述的内容就是大家非常熟悉的女娲造人的故事。 开天辟地之初, 大地上并没有生物, 只有苍茫大地, 纯粹而洁净的自然环境, 寂静而又寂寞, 于是女娲决定创造一个新物种(即人类) 来增加世界的繁荣, 怎么制造呢?别忘了女娲是神仙, 没有办不到的事情, 造人的过程是这样的: 首先, 女娲采集黄土捏成人的形状, 然后放到八卦炉中烧制, 最后放置到大地上生长, 工艺过程是没有错的, 但是意外随时都会发生:第一次烤泥人, 感觉应该熟了, 往大地上一放, 哇, 没烤熟! 于是一个白人诞生了!(这也是缺乏经验的最好证明。 )第二次烤泥人, 上一次没烤熟, 这次多烤一会儿, 放到世间一看, 嘿, 熟过头了, 于是黑人诞生了!第三次烤泥人, 一边烧制一边察看, 直到表皮微黄, 嘿, 刚刚好, 于是黄色人种出现了!这个造人过程是比较有意思的, 是不是可以通过软件开发来实现这个过程呢? 古人云: “三人行, 必有我师焉”, 在面向对象的思维中, 万物皆对象, 是对象我们就可以通过软件设计来实现。 首先对造人过程进行分析, 该过程涉及三个对象: 女娲、 八卦炉、 三种不同肤色的人。 女娲可以使用场景类Client来表示, 八卦炉类似于一个工厂, 负责制造生产产品(即人类) , 三种不同肤色的人,

GOF 23设计模式之(创建型模式)

倖福魔咒の 提交于 2020-01-06 21:52:25
目录 1.单例模式 1.1饿汉模式 1.2懒汉模式 1.3其他单例模式 2.原型模式 2.1 浅克隆 2.2深克隆 3.工厂模式 3.1简单工厂模式 3.2工厂方法 4.抽象工厂模式 5.建造者模式 一、单例模式(Singleton)   保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。   优点:由于只生成一个实例,减少了系统性能开销。可以在系统中设置全局的访问点,优化环境共享资源访问。如:可以设置一个单例类,负责所有数据表的映射处理。   常见的单例模式:     饿汉模式(线程安全,调用效率高,不能延迟加载)(主要)     懒汉模式(线程安全,调用效率不高,可以延迟加载)(主要)     双重检测锁(由于JVM底层内部模型原因,偶尔会出现问题,不推荐使用)     静态内部类式(线程安全,调用效率高,可以延迟加载)     枚举单例(线程安全,调用效率高,不能延迟加载)   单例模式UML图:       (1) 饿汉模式     问题:如果只是加载本类、不调用本类的getInstance()方法,或永远不调用本类。就会造成资源的浪费。 class eh{ //(1)直接创建私有实例对象 private static final eh texteh = new eh(); //(2)私有无参的构造函数 private eh() {} //(3

【设计模式自习室】理解工厂模式的三种形式

折月煮酒 提交于 2020-01-04 00:19:06
前言 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有: 该模式的 介绍 ,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的 代码示例 :熟悉该模式的代码长什么样子 该模式的 优缺点 :模式不是万金油,不可以滥用模式 该模式的 实际使用案例 :了解它在哪些重要的源码中被使用 该系列会逐步更新于我的博客和公众号(博客见文章底部) 也希望各位观众老爷能够关注我的个人公众号: 后端技术漫谈 ,不会错过精彩好看的文章。 系列文章回顾 【设计模式自习室】开篇:为什么我们要用设计模式? 【设计模式自习室】建造者模式 【设计模式自习室】原型模式 【设计模式自习室】透彻理解单例模式 创建型——简单工厂/工厂模式/抽象工厂 引子 工厂模式是一个非常重要的创建型模式,但是工厂模式又分为好多种,并且网上文章很多,很多对工厂模式的定义都不是很明确,甚至还互相冲突,本文希望通过放在一起串讲的形式,力求能够用最简洁的语言 理清 工厂模式。 先看一个工厂模式的定义: “Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to