设计细节

设计模式原则之依赖倒转原则

我们两清 提交于 2019-12-13 08:37:01
依赖倒转原则 高层模块不要依赖低层模块,二者都应该依赖其抽象。 抽象不要依赖细节,细节该依赖抽象。 抽象就是抽象类或接口,细节就是具体实现类。 接口和抽象类的价值体现在实现。 public class YiLaiDaoZhuang { public static void main(String[] args) { Person p=new Person(); p.receive(new Email()); //依赖倒转原则改进 $Person $p=new $Person(); $p.receive(new $Email()); $p.receive(new WeiXin()); } } class Email{ public String getInfo() { return "电子邮件信息:hello,world"; } } class Person{ public void receive(Email email) { System.out.println(email.getInfo()); } } //引入接口,依赖接口。依赖接口稳定性是比较好的。 //使用依赖倒转原则。使用接口依赖抽象,不依赖具体细节。 interface Receiver{ public String getInfo(); } class $Email implements Receiver{

资深安卓程序员带你用另一种角度学习 View 事件分发!

丶灬走出姿态 提交于 2019-12-06 21:09:20
我无法忘却 3 年前备受折磨的那个夜晚 —— 在我第一次学习 View 事件分发,却被网文折磨的那个夜晚。 是网上介绍 View 事件分发的文章不够多吗? 不是的,恰恰相反,网上的爆款文章不计其数,待你仔细阅读,却 颇有一种“外地人上了黑车”的感觉 —— 一言不合先上 30 张图表,带你在城市外围饶个上百圈,就是不直奔主题 解释一个现象为什么会存在、造成它存在的缘由为何、它如此设计是为了解决什么问题 …… 比起 拨开迷雾、明确状况、建立感性认识,他们更热衷于自我包装。 —— 有没有帮助我不管,先唬住人再说。 为了唬人,就算给他人徒添困扰、白费大量时间,也在所不惜! 正是对那次痛苦经历的念念不忘,于是我将这篇文章分享给大家。 在此,我向 3 年前的那个自己发誓,我必在 结尾 200 字 就讲明白,别人非要绕个 3000、5000 字都讲不明白的事件分发。 不仅如此,我还要额外地帮助大家理解,事件分发流程中的 3 个小细节:之所以如此设计,是出于什么考虑。通过“知其所以然”,来方便大家更好地加深印象。 还没阅读的小伙伴也请不要着急,正因为今天讲的是基础,光是看了这一篇,你也没白来! View 事件分发的本质是递归! 什么是递归呢?递归的本质是什么呢? 顾名思义,递归是一种包含 “递” 流程和 “归” 流程的算法。当我们在找寻目标时,便是处于 “递” 流程,当我们找到目标

设计模式之美学习(七):为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

…衆ロ難τιáo~ 提交于 2019-12-06 03:26:32
基于接口而非实现编程。这个原则非常重要,是一种非常有效的提高代码质量的手段,在平时的开发中特别经常被用到。 如何解读原则中的“接口”二字? “基于接口而非实现编程”这条原则的英文描述是: “Program to an interface, not an implementation” 。理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如 Java 中的 interface 接口语法)。这条原则最早出现于 1994 年 GoF 的《设计模式》这本书,它先于很多编程语言而诞生(比如 Java 语言),是一条比较抽象、泛化的设计思想。 实际上,理解这条原则的关键,就是理解其中的“接口”两个字。从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。如果落实到具体的编码,“基于接口而非实现编程”这条原则中的“接口”,可以理解为编程语言中的接口或者抽象类。 这条原则能非常有效地提高代码质量,之所以这么说,那是因为,应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低耦合性,提高扩展性。 “基于接口而非实现编程”这条原则的另一个表述方式,是“基于抽象而非实现编程”

每周回顾:确认代码无误再编译

微笑、不失礼 提交于 2019-12-05 15:37:06
每周回顾:确认代码无误再编译 本周收获 了解了技能设计的一些方法和技能配表 设计技能的时候,先配好一份表,这样自己才能更清楚自己干了啥 其他配置也是同理,自己设计配表结构肯定是必要的,亲自填好能更好的明白自己在干啥,策划要干啥 读书进度——code complete 第三章 在问题定义和需求分析的发现问题比在测试的时候发现问题的成本低几十倍 如果问题定义工作做得不好,在创建阶段所做的可能是无用功 第四章 先写好PDL(programing design language),在细化,如果觉得不够准确,回去重新想 晚一些编译。在不确定是否正确了之前,不急着编译。 避免陷入把各种代码拼凑到一起,通过试运行检验它是否有效。 第七章 自顶向下的方法:设计高层次,不局限于语言细节,不指出下一层次的细节,正规化每个层次,检查每个层次,继续下一个层次。 设计是一个逐次迭代逼近的过程。 骑行 发现了一条比较好的骑行路线:广富林-欢乐谷-淀山湖 除了到广富林这段频繁的红绿灯,其余还不错。 来源: https://www.cnblogs.com/ayaoyao/p/11931555.html

我带你们打队第二周总结

微笑、不失礼 提交于 2019-12-04 19:07:31
姓名 学号 周期计划安排 每周实际工作记录 自我打分 yh 062609 连接点的优化,内部衔接过渡精细 进一步学习了原型设计优化的细节 共同商议加上的连接点适宜实用,对整体的体验有很大的优化 91 lp 071324 优化页面设计,使其大气美观 对初始的登录和注册界面做了调整,将ps技术应用在原型设计上 做到美观、大方,不包含非法内容 88 wxh 092324 收集其他优秀的原型进行借鉴 进一步提升自己的产品 借阅其他优秀原型,取其精华应用在自己的产品上 90 xr 061409 寻找人员测试,优化用户体验 在同学们中找到随机的人员进行测试,对他们的问题进行解答 并根据其建议优化产品 95 来源: https://www.cnblogs.com/npc1158947015/p/11879271.html

区分OOA/OOD/OOP!!!!!

不打扰是莪最后的温柔 提交于 2019-12-03 15:56:19
OOA   Object-Oriented Analysis: 面向对象 分析方法   是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。   OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。   OOA在定义属性的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。   OOA在定义服务的同时要识别消息连接。当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。   OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。OOD模型由4个部分组成。它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。   一、OOA的主要原则。   (1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。   抽象原则有两方面的意义:第一

程序设计原则

非 Y 不嫁゛ 提交于 2019-12-03 11:10:27
转载: https://blinkfox.github.io/2018/11/24/ruan-jian-she-ji/ruan-jian-cheng-xu-she-ji-yuan-ze/ (原文更漂亮,转载此处,仅为了方便自己阅读) 一、前言 软件也像人一样,具有生命力,从出生到死亡,会经历多种变化。软件架构设计也不是一蹴而就的,是不断地演进发展。每个程序员都可以从理解编程原则和模式中受益。 软件设计原则是一组帮助我们避开不良设计的指导方针。根据 Robert Martin 的理论,应该避免不良设计的以下三个重要特点: 僵化 :很难做改动,因为每一个细微的改动都会影响到系统大量的其他功能 脆弱 :每当你做一次改动,总会引起系统中预期之外的部分出现故障 死板 :代码很难在其他应用中重用,因其不能从当前应用中单独抽离出来 下面这些软件设计原则是我从一些书籍和网络中收集而来,并不完整,而且你也需要在一些有“冲突的原则”之间进行权衡和取舍。本文或许会对你的编程、程序设计、讨论或评审工作有所帮助。 二、通用设计原则 1. KISS 所谓 KISS 原则,即: Keep It Simple,Stupid ,指 设计时要坚持简约原则,避免不必要的复杂化,并且易于修改 。 Everything should be made as simple as possible, but not

设计模式

丶灬走出姿态 提交于 2019-12-03 07:07:41
设计模式有哪些? 单例模式:单例模式对实例个数的控制并节约系统资源.在它的核心结构中只包含一个被称为单例类的特殊类,通过构造函数私有化和静态块以及提供对外访问的接口来实现. 应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 工厂模式:工厂模式主要是为创建对象提供了接口 应用场景如下:在编码时不能预见需要创建哪种类的实例;系统不应依赖于产品类实例如何被创建、组合和表达的细节。 观察者模式:定义了对象间一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新 应用场景如下:对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变;对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节; (实现参考https://www.jianshu.com/p/12a009f8d016) 来源: https://www.cnblogs.com/yh2two/p/11782347.html

2019-2020-1学期 20192406 《网络空间安全专业导论》第三周学习总结

纵饮孤独 提交于 2019-12-01 23:31:49
第六章 低级程序设计语言与伪代码 6.1 计算机操作 我们所用的程序设计语言都必须反映出计算机能够执行的操作类型。让我们通过重述计算机的定义来开始新的讨论:计算机是能够存储、检索和处理数据的可编程电子设备。 这个定义中的操作字包括 可编程的 、 存储 、 检索 和 处理 。上一章指出了数据和操作数据的指令逻辑上是相同的,它们存储在相同的地方。这就是“可编程的”这个词的意义所在。操作数据的指令和数据一起存储在机器中。要改变计算机对数据的处理,只需要改变指令即可。 存储、检索和处理 是计算机能够对数据执行的动作。也就是说,控制单元执行的指令能够把数据 存储 到机器的内存中,在机器内存中 检索 数据,在算术逻辑单元中以某种方式 处理 数据。词语“处理”非常通用。在机器层,处理涉及在数据值上执行算术和逻辑操作。 6.2 机器语言 机器语言 :由计算机直接使用的二进制编码指令构成的语言 Pep/8:一台虚拟机 虚拟机 :为了模拟真实机器的重要特征而设计的假想机器 Pep/8反应的重要特征 回忆第5章中所说的,寄存器是中央处理器中算术/逻辑单元的一小块存储区域,它用来存储特殊的数据和中间值。Pep/8有七个寄存器,我们重点研究其中三个: 程序计数器(PC) , 其中包含下一条即将被执行的指令的地址。 指令寄存器(IR) , 其中包含正在被执行的指令的一个副本。 累加器 (是一个寄存器)。

csp-s 81 瓶颈

半世苍凉 提交于 2019-12-01 19:37:56
T1:瓶颈1:敢想敢设计dp状压的dp设计,突破点在于关键的覆盖状态及按钮状态,瓶颈在于 T2:暴力出错点:细节,离散化后并未输出原数 T3:暴力出错点:未考虑从n走到y从 y走到n也合法,瓶颈在于细节以及前驱记录 来源: https://www.cnblogs.com/three-D/p/11714955.html