Java进阶之设计模式

news/2024/7/7 10:30:41

什么是设计模式

答:简单的说,设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计的 经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。

通常来说设计模式分为三大类:

  • 创建型模式,共5种:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实我们在开发过程你中比常用的设计模式也就工厂模式和抽象工厂模式,单例模式,适配器模式。其他的了解一下吧,个人意见。

工厂模式

工厂模式定义就不说了,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

工厂模式通常分为:

  • 普通工厂模式
  • 多个工厂方法模式
  • 静态工厂方法模式

凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。如果比较抽象工厂模式和工厂模式,我们不难发现前者只是在工厂模式之上增加了一层抽象的概念。抽象工厂是一个父类工厂,可以创建其它工厂类。所以我们也叫它 “工厂的工厂”。

适配器模式:通俗的讲,当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能拿来直接用,这个时候你就需要一个适配器来帮你了,其主要作用就是在旧的接口、新的接口之间完成适配。

单例模式

什么是单例模式
单例模式(Singleton Pattern),顾名思义,就是被单例的对象只能有一个实例存在。单例模式的实现方式是,一个类能返回对象的一个引用(永远是同一个)和一个获得该唯一实例的方法(必须是静态方法)。通过单例模式,我们可以保证系统中只有一个实例,从而在某些特定的场合下达到节约或者控制系统资源的目的。

// 双重检验锁
public class Wife {
    private volatile static Wife wife;

    private Wife() { }

    public static Wife getWife() {
        if (wife == null) {
            synchronized(Wife.class) {
                if (wife == null) {
                    wife = new Wife();
                }
            }
        }

        return wife;
    }
}

静态内部类的方式创建单例

// 静态内部类
public class Wife {
    private static class WifeHolder {
        private static final Wife wife = new Wife();
    }

    private Wife() { }

    public static Wife getWife() {
        return WifeHolder.wife;
    }
}

总结一下吧:在开发过程中依据项目需求选择对应的设计模式。不过随着使用框架,这些工厂类其其他设计模式都已经写在框架里了。


http://www.niftyadmin.cn/n/647544.html

相关文章

用Python实现不同数据源的对象匹配【思考】

关于之前的利用python实现不同数据源的数据匹配的实验的一些思考: 在开始匹配之前一定要对于两个数据源中的记录进行分析,结合实际的应用场景判断合适的匹配字段;开始匹配之前可以进行一些简单的判断,看看所得到的数据的纯净度如何…

float double BigDecimal 详解

首先给看一个代码段 package com.main;public class Test1 {public static void main(String[] args){double b10.060.01;float b2(float) (0.060.01);System.out.println(0.060.01);System.out.println(1.0-0.42);System.out.println(4.015*100);System.out.println(303.1/10…

Java三大特性详解--封装

本人也是刚刚入职java开发的小白,在实际工作中和在学校用到的东西还是有很多不一样的,虽然我是科班出身,但是还是深感自己基础不牢啊,可谓基础不牢,地动山摇,在工作中往往一个简单的bug找到吐血&#xff0c…

利用阿里大于(大鱼)平台进行发送手机验证码

昨天看了一篇博文利用阿里云大于平台给手机发送验证码和短信,当时自己就很感兴趣,因为这个技术很有用,相当于以后做用户注册的功能可以进行短信验证,并且大于平台的短信收费也很低,我自己都没有花钱。现在来分享一下我…

Description Resource Path Location Type Project configuration is not up-to-d

右键项目,【Maven】—》【Update Project Configuration…】 搞定 欢迎大家关注个人公众号 分享各种学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,仅供学习交流和分享,不涉及任何商业用途。…

java生成一维码和二维码

这两天想了解一下二维码是怎样生成的。然后在网上看了很多资料,也有很多源码可以直接用的。我也没有自己写,也是拿着源码进行看和修改的,然后生成自己想要的二维码和一维码,还是很不错的,所以分享一下。 首先第一步&a…

PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置

转载于:https://www.cnblogs.com/zhanghaiyang/p/7212840.html

spring-bean的理解

我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。 Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行…