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

机械企业网站模板 蓝色大气 dede织梦企业模板/微信推广图片

机械企业网站模板 蓝色大气 dede织梦企业模板,微信推广图片,临沂网站制作报价,企业网站前端模板一:设计模式分类 经典的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称“Gang of Four”)在他们的书《设计模式:可复用面向对象软件的基础》中定义的。以下是这些设计模式的分类和简要介绍。 1.…


一:设计模式分类

经典的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称“Gang of Four”)在他们的书《设计模式:可复用面向对象软件的基础》中定义的。以下是这些设计模式的分类和简要介绍。

1.1创建型模式

  1. 单例模式 (Singleton):确保一个类只有一个实例,并提供一个全局访问点。
  2. 抽象工厂模式 (Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
  3. 工厂方法模式 (Factory Method):定义一个创建对象的接口,但由子类决定实例化哪个类。
  4. 生成器模式 (Builder):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式 (Prototype):使用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。

1.2结构型模式

  1. 适配器模式 (Adapter):将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
  2. 桥接模式 (Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  3. 组合模式 (Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
  4. 装饰模式 (Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
  5. 外观模式 (Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。
  6. 享元模式 (Flyweight):运用共享技术有效地支持大量细粒度的对象。
  7. 代理模式 (Proxy):为其他对象提供一种代理以控制对这个对象的访问。

1.3行为型模式

  1. 责任链模式 (Chain of Responsibility):为请求创建一个接收者对象的链,这种模式使得多个对象都有机会处理请求,避免了请求的发送者和接收者之间的耦合。
  2. 命令模式 (Command):将一个请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
  3. 解释器模式 (Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
  4. 迭代器模式 (Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。
  5. 中介者模式 (Mediator):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  6. 备忘录模式 (Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象为先前的状态。
  7. 观察者模式 (Observer):定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
  8. 状态模式 (State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
  9. 策略模式 (Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以互换,本模式使得算法可独立于使用它的客户而变化。
  10. 模板方法模式 (Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  11. 访问者模式 (Visitor):表示一个作用于某对象结构中的各元素的操作,它使您可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

这些设计模式在Android开发中也有很多应用,可以帮助开发者设计更好的架构和解决常见问题。尽管有些模式在不同环境中有特定的实现方式,但核心思想依然适用。

二:Android中的使用

在 Android 开发中,虽然23种经典设计模式都有可能用到,但一些模式在实际开发中更为常见和实用。以下是Android开发中常用的设计模式及其应用场景:

1. 单例模式 (Singleton)

应用场景

  • 全局唯一的实例,如网络管理器、数据库管理器、SharedPreferences管理器等。

示例

public class NetworkManager {private static NetworkManager instance;private NetworkManager() {}public static synchronized NetworkManager getInstance() {if (instance == null) {instance = new NetworkManager();}return instance;}
}

 

2. 工厂方法模式 (Factory Method)

应用场景

  • 根据条件动态创建不同的对象,如Fragment的实例化。

示例

public abstract class Fragment {public static Fragment newInstance(String type) {if (type.equals("home")) {return new HomeFragment();} else if (type.equals("settings")) {return new SettingsFragment();} else {return null;}}
}

 

3. 观察者模式 (Observer)

应用场景

  • 事件总线,LiveData,ViewModel和UI组件之间的数据绑定。

示例

public class UserViewModel extends ViewModel {private MutableLiveData<User> user = new MutableLiveData<>();public LiveData<User> getUser() {return user;}public void setUser(User user) {this.user.setValue(user);}
}

 

4. 模板方法模式 (Template Method)

应用场景

  • 定义Activity或Fragment的生命周期方法。

示例

public abstract class BaseActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutId());initialize();}protected abstract int getLayoutId();protected abstract void initialize();
}

5. 适配器模式 (Adapter)

应用场景

  • RecyclerView适配器、ListView适配器。

示例

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {private List<String> data;public MyAdapter(List<String> data) {this.data = data;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {holder.textView.setText(data.get(position));}@Overridepublic int getItemCount() {return data.size();}public static class ViewHolder extends RecyclerView.ViewHolder {TextView textView;public ViewHolder(View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}}
}

6. 代理模式 (Proxy)

应用场景

  • Retrofit的动态代理,用于创建API接口实例。

示例

public interface ApiService {@GET("users/{user}")Call<User> getUser(@Path("user") String user);
}Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build();ApiService service = retrofit.create(ApiService.class);

7. 责任链模式 (Chain of Responsibility)

应用场景

  • 事件分发机制,如触摸事件的传递。

示例

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {if (onInterceptTouchEvent(ev)) {return onTouchEvent(ev);}return super.dispatchTouchEvent(ev);
}

8. 享元模式 (Flyweight)

应用场景

  • 优化内存使用,如复用View对象。

示例

@Override
public View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_view, parent, false);}// Bind data to the viewreturn convertView;
}

9. 装饰模式 (Decorator)

应用场景

  • 动态添加功能,如View的装饰器。

示例

public class BorderDecorator extends View {private View view;public BorderDecorator(View view) {super(view.getContext());this.view = view;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// Draw borderview.draw(canvas);}
}

10. 迭代器模式 (Iterator)

应用场景

  • 处理集合类,如遍历数据列表。

示例

List<String> list = new ArrayList<>();
for (String item : list) {// Process item
}

这些设计模式在Android开发中常见且实用,它们可以帮助我们开发者创建更结构化、可维护和扩展性强的应用程序。

相关文章:

Android里的设计模式

一&#xff1a;设计模式分类 经典的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides&#xff08;合称“Gang of Four”&#xff09;在他们的书《设计模式&#xff1a;可复用面向对象软件的基础》中定义的。以下是这些设计模式的分类和简要介绍。 1.…...

token无感刷新

Token无感刷新通常指的是在用户不知情的情况下自动刷新认证Token&#xff0c;以保持用户的会话状态。这通常在使用JWT&#xff08;JSON Web Tokens&#xff09;作为认证方式时使用。以下是实现无感刷新的一种常见方法&#xff1a; 1. 前端请求拦截&#xff1a; 在发送请求前&a…...

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…...

C++ 后端,Vue前端

参考2篇博客 1-VUE、C前后端调用 2-Vue解决CORS header ‘Access-Control-Allow-Origin’ missing及同源、跨域问题 这里给出App.vue代码 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vueimport axios from axios import { ref…...

使用Navicat Premium向mysql插入2000000条数据

DELIMITER // DROP PROCEDURE IF EXISTS sys_log; CREATE PROCEDURE sys_log() BEGIN DECLARE n int DEFAULT 1; WHILE(n<2000000) DO INSERT INTO sys_log VALUES (n, 超级系统管理员, 查询实时工况数据, /keyParameterMonitoring/getNewestUnitData, {\"role\"…...

docker命令记录

基本命令和参数 docker run: 运行一个新的容器实例。-itd: 组合参数&#xff0c;含义如下&#xff1a; -i: 以交互模式运行容器&#xff0c;保持标准输入打开。-t: 分配一个伪终端。-d: 后台运行容器&#xff0c;即使容器启动后依然返回控制台。 设备映射 --device/dev/dri…...

Java学习七

Java包 String对象 String案例 集合 ArrayList 集合...

麒麟Kylin | 操作系统的安装与管理

以下所使用的环境为&#xff1a;VMware Workstation 17 Pro、Kylin-Server-10-SP2-x86-Release-Build09-20210524 一、创建虚拟机 在VMware主机单击【创建新的虚拟机】 **在新建虚拟机向导中选择【自定义】&#xff0c;然后点击【下一步】 ** 保持默认选项&#xff0c;然后…...

数据结构预备知识(Java):包装类泛型

1、包装类 1.1 包装类 在Java中&#xff0c;每一个基本数据类型都有一个对应的包装类&#xff1a; 在SE的学习中我们已有过简单了解。 我们可以注意到&#xff0c;除了int类型的包装类为Integer&#xff0c;char类型的包装类为Character外&#xff0c;其余基本类型的包装类均…...

掌握Linux Vim:从基础到高级的全面指南

Vim是一款在Linux世界中备受推崇的文本编辑器,它以其强大的功能和高效的操作模式闻名于世。尽管Vim的学习曲线较陡,但一旦掌握,你将发现它在代码编辑和文本处理方面的无与伦比的优势。本文将从Vim的基础知识开始,逐步深入到高级用法和技巧,帮助你全面掌握这款强大的编辑器…...

打好“组合拳”,实现国有企业降本增效

在当前经济不确定性加剧、市场寒意明显的背景下&#xff0c;众多国有企业因历史积累的管理问题而陷入困境。随着经济形势的严峻&#xff0c;各行业普遍出现发展乏力的现象&#xff0c;促使企业开始重视“修炼内功”、“向内挖潜”&#xff0c;试图控制成本&#xff0c;以确保平…...

四川古力未来科技有限公司抖音小店解锁电商新机遇

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度蓬勃发展。四川古力未来科技有限公司紧跟时代步伐&#xff0c;积极拥抱变革&#xff0c;在抖音平台上开设小店&#xff0c;为品牌发展注入了新的活力。那么&#xff0c;四川古力未来科技有限公司抖音小店究竟…...

Maven之介绍

目录 一、简介 &#xff08;2&#xff09;为什么学习Maven&#xff1f; 二、小结 一、简介 &#xff08;1&#xff09;Maven 是一个 Java 项目管理和构建工具。它可以定义项目结构、项目依赖&#xff0c;并使用统一的方式进行自动化构建&#xff0c;是Java项目不可缺少的工具…...

简单了解java中的File类

1、File类 1.1、概述 File对象就表示一个路径&#xff0c;可以是文件路径也可以是文件夹路径&#xff0c;这个路径可以 是存在的&#xff0c;也可以是不存在的。 1.2、常见的构造方法 方法名称说明public File&#xff08;String pathname&#xff09;根据文件路径创建文件…...

边缘检测(一)-灰度图像边缘检测方法

灰度图像边缘检测是数字图像处理与机器视觉中经常遇到的一个问题&#xff0c;边缘检测是否连续、光滑是判断检测方法优劣的一个重要标准&#xff0c;下面通过一个实例提供灰度图像边缘检测方法&#xff0c;该方法对其他图像检测也具有一定的参考价值。 首先&#xff0c;读入一幅…...

2025计算机毕业设计选题题目推荐-毕设题目汇总大全

选题在于精&#xff0c;以下是推荐的容易答辩的选题&#xff1a; SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…...

简易版 | 代码生成器(包含插件)

一、代码生成器 先导入依赖 <!-- Mybatis-Plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> </dependency><!-- 代码生成器 --…...

【Python】Redis数据库

Redis数据库 Unit01一、Redis1.1 概述1.2 安装1.3 Redis-cli1.4 数据类型1.5 字符处理1.6 键的命名规则 二、通用命令三、字符串(String)3.1 概述3.2 常用命令3.3 应用场景 四、列表(List)4.1 概述4.2 常用命令 五、集合(SET)5.1 概述5.3 常用命令 六、有序集合6.1 概述6.2 常用…...

理解并应用:JavaScript响应式编程与事件驱动编程的差异

背景介绍 在现代JavaScript开发中&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;和事件驱动编程&#xff08;Event-Driven Programming&#xff09;是两种非常重要且常用的编程范式。虽然它们都用于处理异步操作&#xff0c;但在理念和实现方式上存在显…...

第4天:用户认证系统实现

第4天&#xff1a;用户认证系统实现 目标 实现用户认证系统&#xff0c;包括用户注册、登录、登出和密码管理。 任务概览 使用Django内置的用户认证系统。创建用户注册和登录表单。实现用户登出和密码重置功能。 详细步骤 1. 使用Django内置的用户认证系统 Django提供了…...

PostgreSQL源码分析 —— FunctionScan

本文分析一下FunctionScan的源码&#xff0c;加深一下理解。以SELECT * FROM generate_series(2,4);为例进行分析。 postgrespostgres# SELECT * FROM generate_series(2,4);generate_series -----------------234 (3 rows)postgrespostgres# explain SELECT * FROM generate…...

数据结构-十大排序算法集合(四万字精讲集合)

前言 1&#xff0c;数据结构排序篇章是一个大的工程&#xff0c;这里是一个总结篇章&#xff0c;配备动图和过程详解&#xff0c;从难到易逐步解析。 2&#xff0c;这里我们详细分析几个具备教学意义和实际使用意义的排序&#xff1a; 冒泡排序&#xff0c;选择排序&#xff0c…...

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端&#xff0c;在进行软件设计和软件开发中提倡单一责任原则&#xff0c;使代码的可读性更强&#xff0c;复杂性更低&#xff0c;可扩展性…...

uniapp微信小程序局部刷新,无感刷新,修改哪条数据刷新哪条

uniapp做微信小程序时&#xff0c;一个商品列表滑到几百条数据时&#xff0c;点进去详情跳转去编辑信息上下架等&#xff0c;修改完成回来商品列表就到第一条数据了&#xff0c;这样页面效果体验感不是很好&#xff0c;是因为我们把数据接口放在onshow中了&#xff0c;每次回来…...

golan的雪花id

今天记录一下 golang的雪花id golang的雪花id 还是比较简单的&#xff0c;其包含的含义以及组成我这就不讲了&#xff0c;好多大佬都有文章写过&#xff0c;我直接上怎么用 先 引入包 go get "github.com/bwmarrin/snowflake" 代码块 func main() {// 设置一个时…...

RK3568 CAN波特率500K接收数据导致CPU4满载

最近调试RK3568 CAN时发现&#xff0c;当CAN作为接收端&#xff0c;在快速接收数据时会导致cpu4满载。down掉can口或者断开外设时恢复正常。并且问题只是在部门CPU版本上出现。在CAN接收中断中打印log&#xff0c;能发现log是按照接收数据的时间打印的。 驱动(rockchip_canfd…...

AI实战 | 使用元器打造浪漫仪式小管家

浪漫仪式小管家 以前我们曾经打造过学习助手和待办助手,但这一次,我们决定创造一个与众不同的智能体,而浪漫将成为我们的主题。我们选择浪漫作为主题,是因为我们感到在之前的打造过程中缺乏了一些仪式感,无法给对方带来真正的惊喜。因此,这一次我们计划慢慢调试,将它发…...

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…...

qt中使用qsqlite连接数据库,却没有在本地文件夹中生成db文件

exe运行起来之后&#xff0c;发现没有在exe文件夹下生成数据库文件&#xff0c;&#xff0c;之前可以&#xff0c;但中间莫名其妙不行了&#xff0c;代码如下 // 建立和SQlite数据库的连接database QSqlDatabase::addDatabase("QSQLITE");// 设置数据库文件的名字da…...

Django的‘通用视图TemplateView’

使用通用视图的好处是&#xff1a;如果有一个html需要展示&#xff0c;不需要写view视图函数&#xff0c;直接写好url即可。 使用通用视图的步骤如下&#xff1a; 1、编辑项目urls.py文件 from django.views.generic import TemplateView 在该文件的映射表中添加&#xff1a…...