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

Java常用设计模式 工厂模式和观察者模式

何谓设计模式:

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
简而言之:就是一个成熟的设计体系,可提高代码复用性让其代码能让他人理解和修改

工厂模式

工厂模式顾名思义则是类似于一个工厂制造产品的模式。它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

介绍

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:主要解决接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

关键代码:创建过程在其子类执行。
观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer
Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

介绍

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

如何解决:使用面向对象技术,可以将这种依赖关系弱化。

关键代码:在抽象类里有一个 ArrayList 存放观察者们。

参考:
观察者模式
工厂模式

相关文章:

  • SQL中的DQL、DML、DDL、DCL
  • ssm框架:Error creating bean with name ‘mvcContentNegotiationManager‘:
  • Java的9种基本数据类型以及封装类
  • 什么是SVN
  • Svn与git的区别 Svn与FTP的最大区别
  • SVN内容冲突
  • MySQL命令安装
  • IDEA自己常用的快捷键
  • IDEA git常用快捷键
  • IDEA常用快捷键汇总
  • MySQL开启用户远程登录权限
  • OCRACLE创建用户并授权
  • radis的yml常用配置
  • mysql关于时区报错问题The server time zone value ‘�й���׼ʱ��‘ is unrecognized
  • oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • angular组件开发
  • Git同步原始仓库到Fork仓库中
  • Java反射-动态类加载和重新加载
  • JS题目及答案整理
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL用户中的%到底包不包括localhost?
  • php的插入排序,通过双层for循环
  • Python实现BT种子转化为磁力链接【实战】
  • Redux系列x:源码分析
  • 创建一种深思熟虑的文化
  • 分享一份非常强势的Android面试题
  • 回顾2016
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 面试遇到的一些题
  • 如何利用MongoDB打造TOP榜小程序
  • 使用common-codec进行md5加密
  • 小程序测试方案初探
  • nb
  • kubernetes资源对象--ingress
  • Python 之网络式编程
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #《AI中文版》V3 第 1 章 概述
  • (10)STL算法之搜索(二) 二分查找
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)STM32单片机上位机
  • (第二周)效能测试
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)三元表达式和列表解析
  • (四)JPA - JQPL 实现增删改查
  • (一)kafka实战——kafka源码编译启动
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Linq学习笔记
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net Core和.Net Standard直观理解
  • .NET Project Open Day(2011.11.13)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET中两种OCR方式对比