首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java创建型模式--工厂模式

一、三种工厂模式的优缺点 1、简单工厂模式     最大优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。对于客户端来说,去除了与    具体产品的依赖。   ...简单工厂模式违背了开-闭原则,有保持了封装对象创建过程的优点。  2、  工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。...工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,    而且克服了它的缺点。...3、 抽象工厂模式          好处:易于交换产品系列,由于具体工厂类,在一个应用只需要在初始化的时候出现一次,这就使得改变一个应用的具    体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置...二、模式实现    1、工厂方法模式: public class GongChangFangFaMode { public static void main(String[] args) {

49810
您找到你想要的搜索结果了吗?
是的
没有找到

【小家java】细说java设计模式---单例模式

1、概述 作为23设计模式之一—单例模式。是我们最耳熟能详的一种设计模式,也是被广大coder所掌握的一种设计模式,但是你真的掌握了单例模式吗?能保证没有bug吗?...Java单例模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。...如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用**,那么单例模式也许是一个值得考虑的选择。 单例模式有很多种写法(7种),大部分写法都或多或少有一些不足。...enum Singleton { INSTANCE; public void whateverMethod() { } } 这种方式是Effective Java...所以这种写法,其实是十分推荐的 3、使用场景 到处都是 4、最后 本文总结了7种Java实现单例的方法,其中前两种都不够完美,双重校验锁和静态内部类的方式可以解决大部分问题,平时工作中使用的最多的也是这两种方式

42020

Java的代理模式

代理模式:通过某种方式给某个对象提供一个代理对象,在不改变原有对象代码的前提下对方法的增强。...在Java我们最熟悉的使用场景就是SpringAOP,本篇文章即是SpringAOP源码分析的前置文章 为什么要使用代理模式 首先我们知道,在项目中如果需要打印方法入参及出参时、需要记录方法执行时间时...这些拦截器过滤器的底层实现其实都是使用了代码模式 本篇文章就基于一个打印方法执行时间的小demo来简单了解一下代理模式的使用 静态代理 首先有一个接口和一个实现类 public interface MainService...System.out.println("end time:"+System.currentTimeMillis()); } } 这里创建的了一个代理类,代理类持有原对象,把所有新增的需求放到代理类

46420

Java的设计模式(四):代理模式

看着她的这一通操作,我不禁感觉一阵熟悉,这代购的模式和 代理模式 何其相似,代购小姐姐代替了实际的客户前去实际地点进行商品的试用和购买,然后在发给对应的客户,在这一过程客户只需要告诉代购小姐姐需要购买某件商品即可...在这种代理模式下,每有一个需要代理的目标对象都需要对应的编写一个与之对应的代理对象,这就会造成系统类个数的爆炸式增长。那么如何解决这个问题呢?动态代理 由此诞生。   ...在Java较为常见的两种动态代理方式如下: 1....JDK动态代理   JDK原生的动态代理主要依赖两个主要的类,位于 java.lang.reflect 的 Proxy 和 InvocationHandler。...该解决方案让我们在编码过程可以更加灵活、可扩展的进行逻辑处理,比如Java RMI中使用到的远程代理,在进行本地开发时,我们只需要像使用本地对象一样使用远程代理对象进行变成即可,无须关心远程代理在实际调用方法时需要进行序列化

43130

Java的设计模式(五):访问模式

比如老师怒其不争的表情:   亦或是得知考砸了的自己惊恐的表情:   或者是父母得知考试分数时恨不得一巴掌拍死你的表情:   在回顾这些场景的同时,我不禁想起设计模式的 访问者模式 。...什么是访问者模式   访问者模式是一种将 数据结构 和 数据操作 分离的 对象行为模式 ,通过访问者模式可以在不改变原有对象数据结构的情况下根据业务场景增加新的数据操作。...; Element :被访问的元素,在元素只需要提供一个用于接收访问者的方法以及必要的数据访问方法(比如getter方法),无须提供任何与业务耦合的数据操作方法; 2....; 第二种场景:针对一个对象结构的不同对象变量进行不同的操作,但同时需要避免在进行新增或者删减数据操作的时候进行对应类的改动(这里可以参考Spring框架的 BeanDefinitionVisitor...不过仔细想一想,在某些固定的场景确实会存在这种只需要增加数据操作而不会改变数据结构的情况,此时我们只需要不对增加对应的访问者即可。从这个方面来看,访问者模式的扩展性又会显得非常强。

1K20

Java的设计模式(三):装饰器模式

那么在装饰器模式,这一弊病是否会得到缓解? 2.2 基于装饰器模式的小鹏汽车系列   有了上面的概念,我们可以尝试使用装饰者模式来实现一下小鹏汽车各种类型、各种配置的汽车。   ...浅析优劣 3.1 装饰器模式的有点   作为设计模式的一种,装饰器模式可谓是将开闭原则诠释到了极致,极其灵活的实现了对象功能的扩展,而不会造成继承带来的子类个数爆炸的情况。...三、Java IO的装饰器模式   如此优秀的设计模式,JDK也有对应使用,比如其中的IO类。   ...在IO具体构件一般用于指出数据来源格式,比如上面的 FileInputStream 说明数据是从 File 文件获取,而具体装饰器则在原本IO操作的基础上加入了额外的功能,比如在 BufferedInpuStream...除了上面提到的两个类,Java IO类库还有其他相应的类,有兴趣的同学可以阅读源码深入了解一下。

46350

Java单例模式笔记

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...3.一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。...2.WEB 的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。...注意事项: getInstance() 方法需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。...2、懒汉式,线程安全 是否 Lazy 初始化:是 是否多线程安全:是 实现难度:易 描述:这种方式具备很好的 lazy loading,能够在多线程很好的工作,但是,效率很低,99% 情况下不需要同步

19720

Java 的 Pipeline 设计模式

此外,Java 还有一些内置解决方案来帮助实现此模式,我们会在文末进行讨论。 2 相关模式 通常,我们会将管道模式与责任链进行比较。管道模式也与装饰器有许多共同点。...但是,这是更改对象状态或使用不同组件处理数据的明智选择。**通常,使用这种模式修改状态过于复杂,我们完全可以通过更直接的方式来实现。**同时,装饰器模式提供临时依赖关系的管理并维护执行顺序。 3....管道设计模式 管道模式的主要思想是创建一组操作(管道)并将数据在这些操作传递。虽然责任链和装饰者也能处理一些这类任务。但是管道设计模式却更加灵活。...责任链和装饰器模式通常仅可以返回 Handler和 Component 定义的返回值类型。管道模式却可以处理任何类型的输入和输出。这种处理数据的灵活性是管道模式的一大特征。...我们可以通过各种方式实现这种设计模式,通过 Stream API 来实现管道模式也非常赞。 在大多数情况下,Java 提供的解决方案就足够了。如果有特殊的需求,可以自行设计管道。

1.4K60

JavaNull Object 设计模式

今天,我将讨论较少使用的空对象模式。在面向对象编程,我们经常处理空对象。空对象是指没有任何引用的对象,或者定义为中性/空功能/行为的对象。...Null Object Pattern null对象设计模式描述了null对象的使用及其在系统的行为。 空对象模式处理空对象。 我们不检查空对象,而是定义空行为或调用不做行为。...null对象模式还可以用作测试的存根,以防测试无法使用资源。 在使用Null对象模式之前,我们应该了解: 这种模式应谨慎使用。它可以使错误出现在正常的程序执行。...让我们看一个例子来更好地理解这个模式。 Example of Null Objects 创建一个抽象类(或接口)来指定各种功能。在这个示例,我使用了shape接口。...8,我们有java.util.Optional处理空引用的类。

94740

Java的设计模式(一):观察者模式

这一对象间的行为模式在软件设计同样存在,也就是我们下面要学习的设计模式—— 观察者模式 。 二、基本概念 1....在上面的例子,驾驶员就是其中的观察者;   其结构图如下:   除此以外,观察者模式 也被称为 发布订阅模式(Publish-Subscribe Pattern)、 模型-视图模式 (Model-View...,在事件驱动模型,事件监听者就对应着观察者模式的观察者对象,事件源和事件共同组成了被观察和被处理的目标对象,其中事件源对应着被观察的目标对象(即事件监听者会被注册到事件源上),而发生在事件源上的事件则是需要被事件监听者处理的对象...JDK的观察者模式   观察者模式是如此的常用,以至于JDK从1.0版本开始就提供了对该模式的支持。...Spring的事件驱动模型--发布/订阅模式   Spring框架对于事件驱动模型做了数据模型上的进一步明确,在原有的概念上又新增了 事件发布者 的角色,由此得到了一个新的模式——发布/订阅模式

49760

初探Java设计模式4:JDK的设计模式

JDK设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图。 首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助。...一、设计模式是什么 (1)反复出现问题的解决方案 (2)增强软件的灵活性 (3)适应软件不断变化 二、学习JDK设计模式的好处 (1)借鉴优秀代码的设计,有助于提高代码设计能力 (2)JDK的设计中体现了大多数设计模式...JDK是怎样体现出来的 (3)类图:某设计模式在JDK中所对应的类图 五、经典设计模式在JDK的体现 1.Singleton(单例) 作用:保证类只有一个实例;提供一个全局访问点 JDK中体现:...State(状态) 作用:将主对象和其状态分离,状态对象负责主对象的状态转换,使主对象类功能减轻 JDK中体现:未发现 类图: ​ 24.Visitor(访问者) 作用:异构的类间添加聚合操作;搜集聚合数据...JDK的体现:未发现 类图: ​ 25.Interpreter(解释器) 作用:用一组类代表某一规则 JDK中体现:java.util.regex.Pattern 类图:四则运算 ​ 26

1.4K30

JAVA单例模式_Java哪些是单例的

说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象...)(java饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式) 3)单例模式要素: a)私有构造方法 b)私有静态引用指向自己实例 c)以自己实例为返回值的公有静态方法 2.实例 饿单例模式:...//多线程时注意线程安全 if(instance == null){ instance = new Singleton(); } return instance; } } 测试类Driver.java...: 在内存只有一个对象,节省内存空间。...频繁访问数据库或文件的对象。

1.5K40

Java 的观察者模式

下面来认识下观察者模式的四个参与者: ? 图1 •Subject,用于注册观察者。观察者使用此接口注册为观察者,并从观察者移除自身。...首先放上该代码的github地址: https://github.com/jinyue233/java-demo/tree/master/design-pattern/src/main/java/com...5,观察者模式分析 下面的分析出自名为"java的架构师技术栈"作者的一文:23种设计模式之观察者模式,一文就能理解 分析:“观察者模式的主要优点在于可以实现表示层和数据逻辑层的分离,并在观察目标和观察者之间建立一个抽象的耦合...因为spring的事件机制其实也是观察者模式的具体应用,而且spring的事件机制的每个listener执行逻辑默认也是单线程同步阻塞执行的,因此若listener过多,逻辑执行时间过长的话,此时可能会导致...6,观察者模式应用举例 1,spring的事件机制 2,Spring Cloud Bus实现消息总线 3,jdk自定义了一套观察者模式的相关接口 注:本文源自Rohit Joshi的《Java Design

66810

Java 8 的设计模式策略

概述 在本篇文章我们对可以在 Java 8 的设计模式策略(strategy design pattern)进行一些简单的说明。...如果你对 Java 的设计模式不是非常清楚的话,可以先自行脑补下。 我们简单的总结就是将以前 Java 使用的接口和实现的设计模式,在 Java 8 可以使用 lambda 函数来进行简化。...在下面内容,我们首先提供了一个简单的设计模式样例,以及在传统的环境下我们是怎么实现这个设计模式的。...这种设计模式为我们在 Java 面向对象设计时候经常用到的。...结论 在本代码,我们对 Java 8 的设计模式策略(strategy design pattern)进行一些简单的说明,因为 lambda 表达式的使用,让我们能够使用更少的代码实现更多的功能。

48830

Java 8 的设计模式策略

概述在本篇文章我们对可以在 Java 8 的设计模式策略(strategy design pattern)进行一些简单的说明。如果你对 Java 的设计模式不是非常清楚的话,可以先自行脑补下。...我们简单的总结就是将以前 Java 使用的接口和实现的设计模式,在 Java 8 可以使用 lambda 函数来进行简化。...在下面内容,我们首先提供了一个简单的设计模式样例,以及在传统的环境下我们是怎么实现这个设计模式的。随后,我们将会使用 Java 8 的 lambda 函数来进行实现,然后介绍一些有什么不同的地方。...这种设计模式为我们在 Java 面向对象设计时候经常用到的。...结论在本代码,我们对 Java 8 的设计模式策略(strategy design pattern)进行一些简单的说明,因为 lambda 表达式的使用,让我们能够使用更少的代码实现更多的功能。

22100

java的单例模式浅析

设计模式之单例模式(Singleton) Singleton模式主要作用是保证在java应用程序,一个类class只有一个实例存在。在很多操作,比如建立目录、数据库连接都需要这样的单线程操作。...使用Singleton的好处还在于节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。...要想保证对象的唯一: 1、为了避免其他程序过多建立该类对象,先控制禁止其他程序建立该对象; 2、为了让其他程序可以访问到该类对象,只好在本类,自定义一个对象; 3、为了方便其他程序对自定义对象的访问,...1、将构造函数私有化; 2、在类创建一个私有、静态的本类对象; 3、在本类中提供一个方法可以获取到对象。...一般Singleton模式通常有几种形式: 第一种形式(饿汉式): public class Singleton { private Singleton

39910
领券