重学java 73.设计模式

news2024/7/4 5:14:50

本想送你一本沉思录,可该迷途知返的人是我

                                                        —— 24.6.18

设计模式

设计模式(Design pattern),是一套被反复使用、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性
1995 年,GoF(Gang of Four,四人组)合作出版了《设计模式:可复用面向对象软件的基础》一书,某收录了 23种设计模式。<大话设计模式>
总体来说设计模式分为三大类:
        创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。-->创建对象
        结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。—> 对功能进行增强
        行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

一、模板方法设计模式

模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。明确了一部分功能,而另一部分功能不明确。需要延伸到子类中实现

示例:

public class QuanJuDe extends Hotel{
    @Override
    public void eatCai(){
        System.out.println("薄饼");
        System.out.println("卷烤鸭");
        System.out.println("蘸酱");
        System.out.println("葱丝");
        System.out.println("吃烤鸭");
    }
}
public class ZhangLiang extends Hotel{
    @Override
    public void eatCai(){
        System.out.println("选菜");
        System.out.println("选味道");
        System.out.println("吃菜");
    }
}
public class Demo300ModelPattern {
    public static void main(String[] args) {
        QuanJuDe quanJuDe = new QuanJuDe();
        quanJuDe.eat();

        System.out.println("__________________");
        ZhangLiang zhangLiang = new ZhangLiang();
        zhangLiang.eat();
    }
}

二、单例模式

1.目的

        让一个类只产生一个对象,供外界使用

2.分类:

        a.饿汉式

        b.懒汉式

a、饿汉式

public class SingletonHun {
    /*
    防止外界随意使用构造方法new对象,我们需要将构造私有化
     */
    private SingletonHun(){

    }

    /*
    为了赶紧new对象,我们new对象的时候变成静态的,让其随着类的加载而加载
    为了不让外界随便使用类名调用此静态对象,我们将其变成private
     */
    private static SingletonHun singleton = new SingletonHun();

    /*
    为了将内部new出来的对象给外界我们可以定义 一个方法,将内部的对象返回给外界
     */
    public static SingletonHun getSingleton(){
        return singleton;
    }
}
public class Demo301Test {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            SingletonHun singleton = SingletonHun.getSingleton();
            System.out.println(singleton);
        }
    }
}

b、懒汉式

public class SingletonLazy {
    /*
    防止外界随意使用构造方法new对象,我们需要将构造私有化
     */
    private SingletonLazy() {

    }

    /*
    懒汉式,不着急new对象
     */
    private static SingletonLazy singletonLazy = null;

    /*
    为了将内部new出来的对象给外界
    定义一个方法,将内部new出来的对象返回
     */
    public static SingletonLazy getSingletonLazy() {
        // 加锁 如果singletonLazy不是null,就没必要抢锁了,直接返回,是null在抢锁
        if (singletonLazy == null) {
            synchronized (SingletonLazy.class) {
                if (singletonLazy == null) {
                    singletonLazy = new SingletonLazy();
                }
            }
        }
        return singletonLazy;
    }
}
public class Demo302Test02 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            SingletonLazy singleton = SingletonLazy.getSingletonLazy();
            System.out.println(singleton);
        }
    }
}

小结:构造私有

对象私有 静态的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP学习笔记--初学

笔录&#xff1a;我是从黑马里面找的资料学习的&#xff0c;如果有人看我的笔记话&#xff0c;建议去看黑马程序课程&#xff0c;更详细一些。 目录 php定义&#xff0c;平台支持&#xff1a; 静态网站&#xff1a; 动态网站&#xff1a; 服务器概念&#xff1a; IP的概念…

电脑版微信修改信息提示音的方法,Resource Hacker修改EXE信息

微信默认的提示音大家都是一样的&#xff0c;在人多的情况下&#xff0c;不容易分辨是不是自己的微信有消息&#xff0c;很不方便&#xff0c;所以飞飞会把微信的消息提示音换了&#xff0c;手机微信换通知铃声还是很简单的&#xff0c;今天着重和你们分享下电脑版微信如何修改…

探索C嘎嘎的奇妙世界:第十四关---STL(string的模拟实现)

1. string类的模拟实现 1.1 经典的string类问题 上一关已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数…

Multisim仿真之万用表、安捷伦万用表、信号发生器操作方法

1、XMM是安捷伦示波器 如下图所示&#xff0c;实物安捷伦的外围3个插孔对应于 XMM图标示波器的右侧3个引脚&#xff0c;上下一一对应 2、函数信号发生器XFG 如下图所示&#xff0c;COM就是GND&#xff0c;正负的意思就是相对于GND而言&#xff0c;有正负电压&#xff1b; 3、…

ViNT: A Foundation Model for Visual Navigation

介绍 现存的问题&#xff1a;预训练的方式在很多领域取得了成功&#xff0c;但是由于环境、平台和应用程序的绝对多样性&#xff0c;因此很难应用在机器人领域。 那么想要做移动机器人的基础模型需要什么&#xff1f; 本文定义了一个机器人领域的基础模型&#xff0c;可以实…

Vue2动态代理无须重启项目解决方案

1、痛点 如果我们需要使用不同的环境地址的时候&#xff0c;就需要使用命令或者手动修改vue.config.js中配置来重新启动项目。当项目项目越来越大的时候&#xff0c;我们需要很长的时间来启动项目&#xff0c;如此反复&#xff0c;极大影响我们开发进度。 2、寻求解决方案 ● v…

九大步骤,带你了解典型的GIS开发流程!

GIS是一门强工具属性的交叉学科。强工具属性意味着GIS实际上更多的依附于其他应用场景而存在&#xff0c;而并非独立存在的&#xff0c;简单来说&#xff0c;GIS更多的是作为其他系统中的子系统而存在。 作为GIS从业人员&#xff0c;上限更多取决于所依附的行业&#xff0c;去…

单载波水声通信技术研究【附MATLAB代码】

文章来源&#xff1a;​微信公众号&#xff1a;EW Frontier 摘要 水下无线通信因其在海洋科研、国防、救援及资源开发等方面的关键作用而备受关注。声波作为水中信息传输的有效载体&#xff0c;推动了水声通信技术的发展&#xff0c;其中单载波调制技术由于其高频谱利用率、结…

计算机网络期末复习1(最后一天才开始学版)

1.一个PPP帧的数据部分&#xff08;用十六进制写出&#xff09;是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E。试问真正的数据是&#xff08;用十六进制写出&#xff09; 由于PPP帧的标志字段为7E,因此,为了区别标志字段和信息字段,将信息字段中出现的每一个0x7E转变成(0x7D,0x5E),0x7…

小程序的登录+发布流程

今天我们来将一下小程序的登录和发布流程&#xff01;&#xff01;&#xff01; 小程序的登录流程 流程图 首先登录流程还是看官网说的&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 这是官网发布的一个流程图 认识cod…

DOOPRIME:日本央行7月加息与否取决于数据,购债规模调整无强烈信号

摘要 日本央行行长植田和男近日在议会发言中表示&#xff0c;7月份是否加息将取决于经济数据表现&#xff0c;而购买日本国债与加息是两个独立的问题&#xff0c;不会通过削减购债规模来释放强烈的政策信号。这一表态引发了市场的广泛关注&#xff0c;投资者和经济学家对此进行…

自动驾驶规划-RTT* 算法 【免费获取Matlab代码】

目录 1.算法原理3.结果展示4.参考文献5.代码获取 1.算法原理 RRT(Rapidly-Exploring Random Trees) 快速随机扩展树&#xff0c;是一种单一查询路径规划算法。RRT 将根节点作为搜索的起点&#xff0c;然后通过随机撒点采样增加叶子节点的方式&#xff0c;生成一个随机扩展树&a…

如何预防最新的Mallox变种hmallox勒索病毒感染您的计算机?

一、引言 近年来&#xff0c;网络安全问题日益严重&#xff0c;勒索病毒成为了其中的一大威胁。其中&#xff0c;.hmallox勒索病毒作为Malox勒索软件家族的新变种&#xff0c;凭借其高度的攻击性和隐蔽性&#xff0c;给全球用户的数据安全带来了严重威胁。本文将深入分析.hmal…

入门三.HTB--Dancing(6.18)

大佬 https://www.cnblogs.com/Hekeats-L/p/16535920.html 任务1 SMB 即Server Message Block&#xff08;服务器消息块&#xff09;&#xff0c;是一种文件共享协议。当文件原件在你的A电脑上&#xff0c;而你想在局域网下用你的手机、iPad或是另一台电脑来访问A电脑上的该文…

分享三个仓库

Hello , 我是恒。大概有半个月没有发文章了&#xff0c;都写在文档里了 今天分享三个我开源的项目&#xff0c;比较小巧但是有用 主页 文档导航 Github地址: https://github.com/lmliheng/document 在线访问:http://document.liheng.work/ 里面有各种作者书写的文档&#xff…

ARM32开发——中断

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 中断概念中断分类中断触发条件 中断概念 中断是计算机系统中的一种机制&#xff0c;用于响应外部事件或内部事件,它可以使单片机暂…

红日靶场实战一 - 学习笔记

最近在学习红蓝对抗&#xff0c;如果有兴趣的可以多关注。 目录 环境搭建 靶场链接 配置网络 攻击机kali网络 配置win7 web服务器网络 配置winserver 2008网络&#xff08;DC域控&#xff09; 配置win2003/win2k3网路(域成员) IP配置情况 外网突破 信息收集 phpmya…

设计模式(五)创建者模式之工厂模式

工厂模式 工厂模式上面类图代码实现Coffee 抽象类AmericanCoffeeLatterCoffeeCoffeeStoreUser 简单工厂模式增加工厂方法更改CoffeeStore 类优缺点扩展静态工厂 工厂方法模式概念结构具体类图代码实现Coffee类AmericanCoffeeLatterCoffee抽象工厂CoffeeFactoryAmericanCoffeeFa…

[BJDCTF2020]ZJCTF,不过如此1

打开题目可以看到一段php文件包含&#xff0c;源码如下 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>…

windows系统上如何打开mobi格式的文件

mobi是亚马逊Kindle电子书的主要格式&#xff0c;拥有广泛的资源和应用场景。在windows上打开mobi格式文件&#xff0c;选择一款合适的电子书阅读器至关重要。而NeatReader&#xff0c;凭借其卓越的性能以及对各种电子书格式的强大支持&#xff0c;已然成为了众多电子书爱好者的…