当前位置: 首页 > news >正文

重学java 73.设计模式

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

                                                        —— 24.6.18

设计模式

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

一、模板方法设计模式

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

示例:

public class QuanJuDe extends Hotel{@Overridepublic void eatCai(){System.out.println("薄饼");System.out.println("卷烤鸭");System.out.println("蘸酱");System.out.println("葱丝");System.out.println("吃烤鸭");}
}
public class ZhangLiang extends Hotel{@Overridepublic 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.lryc.cn/news/376212.html

相关文章:

  • 线代的学习(矩阵)
  • 【Java基础5】JDK、JRE和JVM的区别与联系
  • 2024年先进机械电子、电气工程与自动化国际学术会议(ICAMEEA 2024)
  • WPF 深入理解四、样式
  • TCP相关细节
  • flutter实现UDP发送魔法包唤醒主机
  • 回溯算法练习题(2024/6/18)
  • DSP——从入门到放弃系列2——PLL锁相环(持续更新)
  • Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化
  • 解决Spring Boot项目中数据源URL属性的问题
  • Java每日作业day6.18
  • mac如何检测硬盘损坏 常用mac硬盘检测坏道工具推荐
  • 怎么通俗理解概率论中的c r(cramer rao 克拉默拉奥)不等式?
  • Flask之模板
  • 如何优化 Bash 脚本的执行效率?
  • c语言---循环 、判断基础知识详解
  • Opencv高级图像处理
  • Linux操作系统学习:day03
  • 快排(霍尔排序实现+前后指针实现)(递归+非递归)
  • 客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)
  • 未来科技:Web3如何重塑物联网生态系统
  • C++之模板(二)
  • 相机的标定
  • C# 利用XejeN框架源码,编写一个在 Winform 界面上的语法高亮的编辑器,使用 Monaco 编辑器
  • 03- jQuery事件处理和动画效果
  • RabbitMQ 入门
  • 物联网协议应用
  • 十分钟学会微调大语言模型
  • 结合简单工厂和工厂方法模式:实现灵活的对象创建
  • 网抑云特殊版,登录即永久