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

设计模式及代码

1、工厂方法模式(Factory Method Pattern):

定义一个用于创建对象的接口,让子类决定实例化哪一个类。应用场景:当一个类不知道它所必须创建的对象的类时;一个类希望由它的子类来指定它所创建的对象时。
抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建有关联或者依赖的对象簇,而不需要明确指定具体类。应用场景:当有多个相互依赖的对象簇需要创建时;系统需要独立于它的产品的创建、组合和表示时。

2、单例模式(Singleton Pattern):

确保一个类只有一个实例,并提供一个访问它的全局访问点。应用场景:当一个类只需要一个实例时;一个唯一的实例需要被访问的时候。

3、原型模式(Prototype Pattern):

用原型实例指定创建对象的种类,并通过复制这个原型来创建新的对象。应用场景:当对象的创建比较复杂或者需要一定的时间开销时;一个系统应该独立于它的产品创建、组合和表示时。

4、建造者模式(Builder Pattern):

将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。应用场景:当创建复杂对象的算法应该独立于该对象的组成部分以及其装配方式时;需要更好的复用性和可读性。

5、适配器模式(Adapter Pattern):

将一个类的接口转换成客户希望的另外一个接口。应用场景:当需要使用一个已有的类而它的接口不符合我们的要求时;想要用一个已有的类,但是它不是我们需要的接口时。

1、工厂方法模式

    实现:创建一个工厂接口,具体工厂实现接口并返回对应产品的实例代码:public interface Product {
}public class ConcreteProduct implements Product {
}public interface Factory {
Product createProduct();
}public class ConcreteFactory implements Factory {
public Product createProduct() {
return new ConcreteProduct();
}
}

2、抽象工厂模式

    实现:创建一个抽象工厂接口,具体工厂实现接口并返回对应产品族的实例代码:public interface Button {
void display();
}public class WinButton implements Button {
public void display() {
System.out.println("WinButton");
}
}public class MacButton implements Button {
public void display() {
System.out.println("MacButton");
}
}public interface GUIFactory {
Button createButton();
}public class WinFactory implements GUIFactory {
public Button createButton() {
return new WinButton();
}
}public class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
}

3、单例模式

    实现:使用静态方法getInstance()获取唯一的实例代码:public class Singleton {
private static Singleton instance;private Singleton() {}public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

4、原型模式(创新模式)

// 原型接口
public interface Prototype {
public原型模式是通过复制(Clone)一个已有的对象来创建新的对象,而不是通过实例化一个类来创建新对象。原型模式是创建型模式之一,它提供了一种快捷创建对象的方法。

在Java中,原型模式通过实现java.lang.Cloneable接口和重写Object类中的clone()方法来实现。如果一个类想要实现原型模式,需要满足以下两个条件:

  1. 实现Cloneable接口,以告知Java虚拟机这个类可以被克隆。
  2. 重写Object类中的clone()方法,在其中调用super.clone()方法获取原型对象的副本,然后将其返回。

下面是一个简单的示例:


class Prototype implements Cloneable {
@Override
public Prototype clone() throws CloneNotSupportedException {
return (Prototype) super.clone();
}
}class ConcretePrototype extends Prototype {
private String field;public String getField() {return field;
}public void setField(String field) {this.field = field;
}}public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
ConcretePrototype prototype = new ConcretePrototype();
prototype.setField("123");ConcretePrototype clonedPrototype = prototype.clone();System.out.println(clonedPrototype.getField()); // "123"
}}/**在上面的代码中,我们创建了一个ConcretePrototype类,它继承了Prototype类,并且实现了clone()方法。在client中,我们创建了一个ConcretePrototype对象,然后克隆它并打印出它的field属性值。由于我们实现了原型模式,在克隆时field属性的值也被一同复制了。*/

5、建造者模式

    实现:创建一个Builder接口,指定构造顺序,Builder实现类实现Builder接口,将构建结果返回代码:public class Product {
private String partA;
private String partB;
private String partC;public void setPartA(String partA) {
this.partA = partA;
}public void setPartB(String partB) {
this.partB = partB;
}public void setPartC(String partC) {
this.partC = partC;
}
}public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product getResult();
}public class ConcreteBuilder implements Builder {
private Product product = new Product();

相关文章:

设计模式及代码

1、工厂方法模式(Factory Method Pattern): 定义一个用于创建对象的接口,让子类决定实例化哪一个类。应用场景:当一个类不知道它所必须创建的对象的类时;一个类希望由它的子类来指定它所创建的对象时。 抽…...

9.java程序员必知必会类库之加密库

前言 密码学在计算机领域源远流长,应用广泛。当前每时每刻,每一个连接到互联网的终端,手机,电脑,iPad都会和互联网有无数次的数据交互,如果这些数据都是明文传输那将是难以想象的。为了保护用户隐私&#…...

C技能树:for循环:九九乘法表

使用for循环&#xff0c;打印九九乘法表。下列四个选项中有一项无法实现该功能&#xff0c;请找出该错误选项。 #include <stdio.h> int main(int argc, char** argv) {int i 0;int j 0;(_____1_____)return 0; } int row 0; int col 0; for(i 0; i < 8…...

Win10老是蓝屏收集错误信息重启无效怎么办?

Win10老是蓝屏收集错误信息重启无效怎么办&#xff1f;有用户遇到了电脑开机蓝屏的情况&#xff0c;收集错误信息重启电脑之后&#xff0c;依然无法解决问题。那么这个问题要怎么去进行解决呢&#xff1f;接下来我们来看看以下具体的处理方法教学吧。 准备工作&#xff1a; 1、…...

Redis入门学习笔记【五】Redis在分布式环境下常见的应用场景

一、分布式锁 当多个进程不在同一个系统中&#xff0c;用分布式锁控制多个进程对资源的操作或者访问。 与之对应有线 程锁&#xff0c;进程锁。 分布式锁可以避免不同进程重复相同的工作&#xff0c;减少资源浪费。 同时分布式锁可以避免破坏数据正 确性的发生&#xff0c; …...

Python ZIpFile 解惑:GBK 编码与乱码现象

文章目录 参考描述铺垫乱码现象编码与解码编码解码 字符集Unicode 字符集UTF-8CP437Zip 文件与 CP437 编码 GB2312GB2012GBK 单字节编码与多字节编码 溯源通用标志位与语言编码标志ZipFile 所支持的两种编码方式GBK 编码与 Zip 应用乱码现象产生的原因 解决 参考 项目描述维基…...

【LeetCode】213. 打家劫舍 II

213. 打家劫舍 II&#xff08;中等&#xff09; 思路 这道题是 198.打家劫舍 的拓展版&#xff0c;区别在于&#xff1a;本题的房间是环形排列&#xff0c;而198.题中的房间是单排排列。 将房间环形排列&#xff0c;意味着第一间房间和最后一间房间不能同时盗窃&#xff0c;因…...

从初识RabbitMQ到安装了解

一、同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不…...

MySQL(六)-字符串函数的使用解析

字符串函数的使用解析 1 计算字符串字符数的函数和字符串长的函数2 合并字符串函数 CONCAT(s1,s2,...)、CONCAT_WS(xs1,s2,...)3 替换字符串函数INSERT(s1,x,len,s2)4 字母大小写转换函数5 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)6 填充字符串的函数 LPAD(s1,len,s2)…...

Zookeeper集群搭建

搭建Zookeeper集群 1.1 搭建要求 真实的集群是需要部署在不同的服务器上的&#xff0c;但是在我们测试时同时启动很多个虚拟机内存会吃不消&#xff0c;所以我们通常会搭建伪集群&#xff0c;也就是把所有的服务都搭建在一台虚拟机上&#xff0c;用端口进行区分。 我们这里要…...

【计算机视觉 | 目标检测】OVD:Open-Vocabulary Object Detection 论文工作总结(共八篇)

文章目录 一、2D open-vocabulary object detection的发展和研究现状二、基于大规模外部图像数据集2.1 OVR-CNN&#xff1a;Open-Vocabulary Object Detection Using Captions&#xff0c;CVPR 20212.2 Open Vocabulary Object Detection with Pseudo Bounding-Box Labels&…...

C++入门基础知识[博客园长期更新......]

0.博客园链接 博客的最新内容都在博客园当中&#xff0c;所有内容均为原创(博客园、CSDN同步更新)。 C知识点集合 1.命名空间 在往后的C编程中&#xff0c;将会存在大量的变量和函数&#xff0c;因为有大量的变量和函数&#xff0c;所以C的库会非常多。那么在C语言编程中&a…...

( “树” 之 BST) 501. 二叉搜索树中的众数 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 ❓501. 二叉搜索树中的众数 难度&#xff1a;简单 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root…...

openharmony内核中不一样的双向链表

不一样的双向链表 链表初识别遍历双向链表参考链接 链表初识别 最近看openharmony的内核源码时看到一个有意思的双向链表&#xff0c;结构如下 typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev; //前驱节点struct LOS_DL_LIST *pstNext; //后继节点 }LOS_DL_LIST;不…...

大文件删除不在回收站里怎么找回

在日常办公中&#xff0c;总会有一些新的文件产生&#xff0c;和用完后的文件清理掉。有时候不小心误删文件也是常有的事。但如果大文件删除不在回收站里怎么找回呢?遇到的小伙伴们请不要别急&#xff0c;只要按照下面的方法做就行了。 正常情况下删除会进入到回收站中&#x…...

Ubuntu22.04部署Pytorch2.0深度学习环境

文章目录 安装Anaconda创建新环境安装Pytorch2.0安装VS CodeUbuntu下实时查看GPU状态的方法小实验&#xff1a;Ubuntu、Windows10下GPU训练速度对比 Ubuntu安装完显卡驱动、CUDA和cudnn后&#xff0c;下面部署深度学习环境。 &#xff08;安装Ubuntu系统、显卡驱动、CUDA和cudn…...

php的面试集结(会持续更新)

PHP 高级工程面试题汇总 php面试 1.大型的分页查询 发现当表中有很多上万条数据时&#xff0c;越后的数据用limit分页显示就越慢&#xff08;>2秒&#xff09;&#xff0c;可能是mysql的特性所致。所以花了点时间总结实现了更优解决方案&#xff0c;最终实现毫秒级响应。…...

谁在成为产业经济发展的推车人?

区域发展的新蓝图中&#xff0c;京东云能做什么&#xff1f;它的角色是什么&#xff1f;这个问题背后&#xff0c;隐藏的不仅是京东云自身的能力和价值&#xff0c;更是其作为中国互联网云厂商的代表之一&#xff0c;对“技术产业”的新论证。 作者|皮爷 出品|产业家 关于云…...

上海无纺布制造商【盈兹】申请纳斯达克IPO上市,募资1100万美元

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;来自上海的无纺布制造商【盈兹】&#xff0c;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;ETZ&#…...

Build an SAP Fiori App(一)后面更新中

1.登录 SAP BTP Trial 地址&#xff1a; https://account.hanatrial.ondemand.com 流程可以参考 点击 serviced marketplace 搜索studio 点击创建 点击创建&#xff0c;点击view subscription 点击go to application 创建完成后 添加新链接 Field Value Name ES5 - if you’…...

关于GNSS技术介绍(二)

在上期文章中&#xff0c;我们介绍了GNSS技术的发展历程、原理&#xff0c;并对不同类型的定位技术进行了介绍&#xff0c;在本期文章中我们将继续讨论GNSS的优点与应用及其测试方法和解决方案。 GNSS的优点与应用 目前GNSS技术已经成为日常生活不可或缺的一部分&#xff0c;几…...

拿到新的服务器必做的五件事(详细流程,开发必看)

目录 1. 配置免密登录 基本用法 远程登录服务器&#xff1a; 第一次登录时会提示&#xff1a; 配置文件 创建文件 然后在文件中输入&#xff1a; 密钥登录 创建密钥&#xff1a; 2.部署nginx 一、前提条件 二、安装 Nginx 3.配置python虚拟环境 1.安装虚拟环境 …...

主机防病毒攻略之勒索病毒

勒索病毒并不是某一个病毒&#xff0c;而是一类病毒的统称&#xff0c;主要以邮件、程序、木马、网页挂马的形式进行传播&#xff0c;利用各种加密算法对文件进行加密&#xff0c;被感染者一般无法解密&#xff0c;必须拿到解密的私钥才有可能破解。 已知最早的勒索软件出现于 …...

Win10系统重装过程(一键装机)

相信不少小伙伴都有刷机重装系统的过程&#xff0c;那种镜像&#xff0c;up盘&#xff0c;压缩包等多个复杂过程也折磨的大伙不堪重负&#xff0c;因此本期带来简易版一键装机相应操作。 下载地址&#xff1a; 小心点击下方链接&#xff0c;点击即下载&#xff08;3.66GB&…...

查询优化之单表查询

建表 CREATE TABLE IF NOT EXISTS article ( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, author_id INT(10) UNSIGNED NOT NULL, category_id INT(10) UNSIGNED NOT NULL, views INT(10) UNSIGNED NOT NULL, comments INT(10) UNSIGNED NOT NULL, title VARBI…...

ChatGPT写小论文

ChatGPT写小论文 只是个人对写小论文心得?从知乎,知网自己总结的,有问题,可以留个言我改一下 文章目录 ChatGPT写小论文-1.写论文模仿实战(狗头)0.论文组成1.好论文前提:2.标题3.摘要4.关键词5.概述6.实验数据、公式或者设计7.结论&#xff0c;思考8.参考文献 0.模仿1.喂大纲…...

公共资源包发布流程详解

文章目录 公有包发布并使用npm安装git仓库协议创建及使用 npm 私有包创建及使用 group npm 私有包私有仓账密存放位置 当公司各个系统都需要使用特定的业务模块时&#xff0c;这时候将代码抽离&#xff0c;发布到 npm 上&#xff0c;供下载安装使用&#xff0c;是个比较好的方案…...

设计模式简谈

设计模式是我们软件架构开发中不可缺失的一部分&#xff0c;通过学习设计模式&#xff0c;我们可以更好理解的代码的结构和层次。 设计原则 设计原则是早于设计方法出现的&#xff0c;所以的设计原则都要依赖于设计方法。这里主要有八个设计原则。 推荐一个零声学院免费教程&…...

day35—选择题

文章目录 1.把逻辑地址转换程物理地址称为&#xff08;B&#xff09;2.在Unix系统中&#xff0c;处于&#xff08;C&#xff09;状态的进程最容易被执行3. 进程的控制信息和描述信息存放在(B)4.当系统发生抖动&#xff08;thrashing&#xff09;时&#xff0c;可以采取的有效措…...

mybatis的<foreach>标签使用

记录&#xff1a;419 场景&#xff1a;使用MyBatis的<foreach></foreach>标签的循环遍历List类型的入参。使用collection属性指定List&#xff0c;item指定List中存放的对象&#xff0c;separator指定分割符号&#xff0c;open指定开始字符&#xff0c;close指定结…...