设计模式(总写)

Java设计模式 Java设计模式是一组在解决软件设计中常见问题时的经验总结,它们是可重用的解决方案模板,旨在提高代码的可维护性、灵活性和可扩展性 阅读详情
导读:
  设计模式 (Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
  GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。
   一、设计模式和框架
  现在,可复用面向对象软件系统现在一般划分为三大类:应用程序工具箱和框架(Framework),我们平时开发的具体软件都是应用程序;Java的API属于工具箱;而框架是构成一类特定软件可复用设计的一组相互协作的类。EJB(EnterpriseJavaBeans)是Java应用于企业计算的框架.
  框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式.
  另外,设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构,我们一般开发者如果突然接触EJBJ2EE等框架,会觉得特别难学,难掌握,那么转而先掌握设计模式,无疑是给了你剖析EJB或J2EE系统的一把利器。
   二、设计模式的原则
  为什么要提倡"Design Pattern"呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?OO界有前辈的几个原则:"开-闭"原则(Open Closed Principal)、里氏代换原则、合成复用原则。设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
   1、"开-闭"原则
  此原则是由"Bertrand Meyer"提出的。原文是:"Software entities should be open for extension,but closed for modification"。就是说模块应对扩展开放,而对修改关闭。模块应尽量在不修改原(是"原",指原来的代码)代码的情况下进行扩展。那么怎么扩展呢?我们看工厂模式"factory pattern":假设中关村有一个卖盗版盘和毛片的小子,我们给他设计一"光盘销售管理软件"。我们应该先设计一"光盘"接口。如图:
  [pre]______________
  |<>|
  | 光盘 |
  |_____________|
  |+卖() |
  | |
  |_____________|[/pre]
  而盗版盘和毛片是其子类。小子通过"DiscFactory"来管理这些光盘。代码为:
  public classDiscFactory{
  public static 光盘 getDisc(java/lang/String.java.html" target="_blank">String name){
  return (光盘)java/lang/Class.java.html" target="_blank">Class.forName(name).getInstance();
  }
  }
  有人要买盗版盘,怎么实现呢?
  public class 小子{
  public static void main(java/lang/String.java.html" target="_blank">String[] args){
  光盘 d=DiscFactory.getDisc("盗版盘");
  光盘.卖();
  }
  }
  如果有一天,这小子良心发现了,开始卖正版软件。没关系,我们只要再创建一个"光盘"的子类"正版软件"就可以了。不需要修改原结构和代码。怎么样?对扩展开发,对修改关闭。"开-闭原则"
  工厂模式是对具体产品进行扩展,有的项目可能需要更多的扩展性,要对这个"工厂"也进行扩展,那就成了"抽象工厂模式"。
   2、里氏代换原则
  里氏代换原则是由"Barbara Liskov"提出的。如果调用的是父类的话,那么换成子类也完全可以运行。比如:
  光盘 d=new 盗版盘();
  d.卖();
  现在要将"盗版盘"类改为"毛片"类,没问题,完全可以运行。Java编译程序会检查程序是否符合里氏代换原则。还记得java继承的一个原则吗?子类overload方法的访问权限不能小于父类对应方法的访问权限。比如"光盘"中的方法"卖"访问权限是"public",那么"盗版盘"和"毛片"中的"卖"方法就不能是package或private,编译不能通过。为什么要这样呢?你想啊:如果"盗版盘"的"卖"方法是private。那么下面这段代码就不能执行了:
  光盘 d=new 盗版盘();
  d.卖();
  可以说:里氏代换原则是继承复用的一个基础。
   3、合成复用原则
  就是说要少用继承,多用合成关系来实现。我曾经这样写过程序:有几个类要与数据库打交道,就写了一个数据库操作的类,然后别的跟数据库打交道的类都继承这个。结果后来,我修改了数据库操作类的一个方法,各个类都需要改动。"牵一发而动全身"!面向对象是要把波动限制在尽量小的范围。
  在Java中,应尽量针对Interface编程,而非实现类。这样,更换子类不会影响调用它方法的代码。要让各个类尽可能少的跟别人联系,"不要与陌生人说话"。这样,城门失火,才不至于殃及池鱼。扩展性和维护性才能提高
  理解了这些原则,再看设计模式,只是在具体问题上怎么实现这些原则而已。张无忌学太极拳,忘记了所有招式,打倒了"玄幂二老",所谓"心中无招"。设计模式可谓招数,如果先学通了各种模式,又忘掉了所有模式而随心所欲,可谓OO之最高境界。呵呵,搞笑,搞笑!(JR)
   4 依赖倒转原则
  抽象不应该依赖与细节,细节应当依赖与抽象。
  要针对接口编程,而不是针对实现编程。
  传递参数,或者在组合聚合关系中,尽量引用层次高的类。
  主要是在构造对象时可以动态的创建各种具体对象,当然如果一些具体类比较稳定,就不必在弄一个抽象类做它的父类,这样有画舌添足的感觉
   5 接口隔离原则
  定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
   6 抽象类
  抽象类不会有实例,一般作为父类为子类继承,一般包含这个系的共同属性和方法。
  注意:好的继承关系中,只有叶节点是具体类,其他节点应该都是抽象类,也就是说具体类
  是不被继承的。将尽可能多的共同代码放到抽象类中。
   7 迪米特法则
  最少知识原则。不要和陌生人说话。
  
  Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1904629

本文转自
http://blog.youkuaiyun.com/xiwenlei/archive/2007/11/27/1904629.aspx
从逻辑门到俄罗斯方块:构建完整计算机系统的实践指南 计算机系统是一个层次化的抽象体系,从底层的逻辑门电路到高级的应用程序,每一层都通过特定的接口和协议向上提供服务。其核心原理在于将复杂的计算任务分解为简单的二进制操作,通过中央处理器(CPU)执行指令序列来实现。这种分层抽象的技术价值在于提高了开发效率,使得软件工程师无需关注硬件细节即可编写复杂程序。在编译器与操作系统的协同下,高级语言代码被翻译为机器指令,驱动硬件完成图形渲染、输入处理等任务。本文以构建一个完整的计算机系统为例,深入探讨了如何通过实践打通从硬件到软件的认知断层,其中涉及硬件描述语言(HDL) 阅读详情

相关推荐

从NAND门到俄罗斯方块:自底向上构建完整计算机系统的硬核实践

计算机系统是一个由硬件和软件协同工作的复杂体系,其核心原理在于将高级抽象逐步转化为底层物理实现。理解这一过程的关键在于掌握从逻辑门到可运行程序的完整技术栈。通过硬件描述语言(HDL)定义数字逻辑电路,可以构建出算术逻辑单元(ALU)、中央处理器(CPU)和内存等核心组件,形成计算机的硬件基础。在此基础上,指令集架构定义了硬件与软件的交互界面,而汇编语言、虚拟机和编译器等技术则构成了将高级语言转化为机器指令的软件工具链。这种自底向上的构建方法具有极高的教育价值,能够帮助开发者打通软硬件知识隔阂,深刻理解程序在

weixin_34302561的博客 350

五种设计模式总结

设计模式总结 今天心血来潮想搞一下之前也一直没有搞清楚的设计模式来看看。这块知识点说实话一直是我一个知识盲区,之前一直也没有搞清楚,在今天我详细总结了五个常用并且好用的设计模式,相信只要看过这篇文章,一定会有所触类旁通,其他设计模式理解起来也不成问题了。 工厂模式 首先要明确,工厂模式分为三种: 简单工厂设计模式 工厂方法 抽象方法 简单工厂模式 首先来简单了解一下简单工厂模式是什么吧~ ...

呼卓宇的博客 1651

从NAND门到俄罗斯方块:计算机系统分层抽象实践全解析

计算机系统建立在分层抽象的核心原理之上,每一层都基于下一层的实现并为上一层提供服务,这种设计模式是理解现代计算技术的基础。从数字逻辑门电路开始,通过组合逻辑和时序逻辑构建出具备计算与存储能力的基础部件,进而形成完整的CPU架构,这体现了硬件抽象的价值。在软件层面,机器语言、虚拟机、编译器构成了从底层硬件到高级应用的桥梁,使得复杂应用的开发成为可能。这种分层思想在工程实践中至关重要,它能帮助开发者理解从高级语言指令到晶体管开关的完整执行路径。NAND2Tetris项目正是这一原理的绝佳实践,通过从逻辑门开始构

weixin_34015336的博客 425

单列设计模式几种写法的比较

单例模式有两种写法,懒汉式和饿汉式 1.饿汉式:在程序启动或单列模式类被加载的时候,单例模式实例就已经被创建。 2.懒汉式:当程序第一次访问单例模式实例时才进行创建。懒汉式实现了延迟加载的功能。 选择:当单例模式在系统中经常被用到时,饿汉式是一个不错的选择。但如果单例模式在系统中很少使用或者几乎不会用到,那么可以选择懒汉式。 好了,写代码吧。 饿汉式代码 public Si

Mr.yang 697

从与非门到俄罗斯方块:Nand2Tetris 12个项目实战指南

计算机组成原理常因抽象而难以落地,而通过HDL从NAND门构建ALU、CPU、汇编器、虚拟机、编译器和操作系统,能直观理解代码如何转化为电信号。这种自底向上的项目式学习,将硬件描述、汇编、编译原理和操作系统串联为可运行的完整栈,每个阶段都有测试脚本验证。典型应用包括补足体系结构实操、排查底层引脚错误、构建从Jack到Hack的工具链。Nand2Tetris的12个递进项目正是这一路径的实践,最终跑起俄罗斯方块,让汇编成为日常语言。

weixin_42602241的博客 169

从零开始:如何在STM32上搭建QP框架实现事件驱动开发(附完整代码)

本文详细介绍了如何在STM32嵌入式平台上从零开始搭建QP框架,实现事件驱动开发。通过对比传统前后台系统与RTOS的局限,深入剖析了QP框架基于活动对象和层次式状态机的核心优势,并提供了完整的环境配置、代码移植及一个智能灯光控制器的实战案例,帮助开发者构建清晰、可维护的复杂嵌入式应用。

weixin_29200741的博客 487

23种设计模式汇总整理

设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型模式,共七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 ...

一个本科小生的奋斗史 28万+

sklearn2pmml xgboost缺失值(missing)处理的坑

sklearn2pmml xgboost缺失值(missing)如何处理 今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。 看了下同事的代码,貌似也没有问题 from sklearn2pmml import PMMLPipeline from sklearn2pmml import sklearn2pmml fro...

Skycrab 8969

23种设计模式总结

1.单例模式(Singleton Pattern) 定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) 通用代码:(是线程安全的) public class Singleton { ...

weixin_34128501的博客 4942

【低空经济】低空无人机公共测试场与验证基地设计方案

公共测试场与验证基地是为低空无人机相关技术的研发、测试与应用提供一个系统性的平台。在无人机产业蓬勃发展的背景下,建设一个配备完善、功能齐全的公共测试场与验证基地显得尤为重要。该基地不仅可以作为无人机的测试和验证场地,还可以为相关企业、科研机构以及政府部门提供技术支持和服务。因此,为此基地的设计方案必须综合考虑功能性、安全性、灵活性与可持续性等多方面的因素。首先,公共测试场需划分为多个专用区域,以便满足不同类型无人机的测试需求。这包括低空飞行区域、紧急着陆区、操控模拟区和监测与数据采集区等。

2502_92579126的博客 1596

【HALCON+C#实战】3D点云测量系统开发全攻略:从源码解析到工业应用

本文详细介绍了基于HALCON和C#开发3D点云测量系统的全流程,从环境搭建、核心算法实现到工业应用优化。通过源码解析和实战技巧,帮助开发者解决点云数据处理、几何测量及系统集成中的常见问题,提升工业检测的精度与效率。

brown的博客 209

俄罗斯方块游戏设计——不拘一格编程序之二

不拘一格编程序之二  俄罗斯方块插入新增随机行算法   【题目】: 一个数组int a[10],要求为每个元素随机赋值0或者1,但是这10个元素不能全0,也不能全1。 【说明】:俄罗斯方块中需要在最下面插入若干具有随机方块的行,以增加游戏的难度。当然不能一行全是方块,这

编程浪子朱云翔 1万+

SAP Fiori Launchpad 上看不到任何 tile 应该怎么办?

中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 941

偷懒才能编程序——计算机达人成长之路(18)

11、俄罗斯方块(六)简洁好景不长,没有挑战性的游戏只能暂时吸引眼球,却不能留住客户。大家稍稍接触,YY完毕之后,纷纷回到现实,给木鸿飞写下一个“继续编完整的俄罗斯方块,我看好你”的留言,然后各回各位。不是木鸿飞不想完成完整的俄罗斯方块,而是力不能及。前面讲过,木鸿飞设计的代码有2千多行,而此处只有400行就完成了基本的功能,那么多余的1600行是什么内容呢?其实木鸿飞的设计思路存在问

编程浪子朱云翔 3472

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

315

【国产MCU】-认识CH32V307及开发环境搭建

CH32V307是[沁恒](https://www.wch.cn/)推出的一款基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。

视觉与物联智能 2343

从逻辑门到俄罗斯方块:构建计算机的完整实践指南

计算机系统是一个由多层抽象构成的复杂工程,其核心原理在于将基础的布尔逻辑通过硬件描述语言(HDL)逐步构建为功能芯片,进而组成中央处理器(CPU)与内存。理解这一自底向上的构建过程,是掌握计算机组成原理、体系结构与编译原理等核心课程的关键。这种系统性的认知不仅具有重要的教育价值,更能帮助开发者形成“第一性原理”思维,从根本上理解软件与硬件的协同工作方式。在工程实践中,通过硬件模拟器、汇编器和编译器等一系列工具链,可以将抽象理论转化为可运行的程序,例如最终实现一个能玩俄罗斯方块游戏的完整计算机系统。这正是“从

weixin_34326179的博客 357

27、振动信号实时并行处理与风力发电机模型鲁棒控制设计

本文探讨了振动信号实时并行处理与风力发电机模型鲁棒控制设计两大核心技术。在振动信号处理方面,提出基于FPGA、RT和PC三级架构的并行采集与处理系统,实现高效、实时的振动分析,适用于电机状态监测与预测性维护。在风力发电控制方面,研究风力农场布局优化(WFLO)问题,比较九种多目标元启发式算法性能,并提出基于扰动观察法的最大功率点跟踪(MPPT)控制策略,提升发电效率与系统鲁棒性。研究成果为工业设备智能监控与可再生能源优化提供了有效技术路径。

sunny的博客 72

分享几个汇编语言写的游戏

分享几个汇编语言写的游戏 【下载地址】分享几个汇编语言写的游戏 这个开源项目汇集了多个使用汇编语言编写的经典游戏,包括贪吃蛇、俄罗斯方块和五子棋。汇编语言作为接近硬件的低级编程语言,通过这些游戏,您可以深入理解其底层机制并提升编程技能。每个游戏都经过精心设计,既能带来娱乐体验,又能帮助您在实践中掌握汇编语言的核心概念。这...

gitblog_06710的博客 455

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

学习Python最好的途径——激发自己的学习兴趣!

Python是当下国内最为火爆的编程语言,没有之一! Python加入计算机等级考试,且即将加入考高,甚至于有小学都开始教授Python! 学习Python最好的途径——激发自己的学习兴趣!Python 的概念“人生苦短,我用Python”。这句戏言真实反映了Python语言的江湖地位。那么,要快速上手和进阶Python编程,有什么好途径...

weixin_33859231的博客 140

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

无准备,不编程——计算机达人成长之路(15)连载

8、俄罗斯方块(三)编码嬉闹归嬉闹,最终二人静下心来,绍绍开始请教俄罗斯方块的设计,木鸿飞也不藏拙,马上开始讲解;“游戏其实分为三重循环,也就是可以分为三个部分。”“哪三个?”绍绍问。“我称之为外循环、中循环和内循环。其中外循环产生方块,循环内是一个方块从产生到落下到消失的全部生命周期,每循环一次肯定落下了一个方块。”木鸿飞道。“恩,可以理解。”绍绍点点头,“外循环对应每一个方

编程浪子朱云翔 3335

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

下一篇: blog开通了
Reasonsoft
博客等级 码龄21年 6粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值