java与模式(OOD)
tof21
成功的人并不是一定比别人更有才智和更幸运。他们只是在不断的尝试、不断的失败,直到成功
展开
-
解惑领域驱动设计
解惑领域驱动设计 发表于 2018-03-08 | 分类于 Design | 0 | 阅读次数: 106最近重读Eric Evans的经典《领域驱动设计》,正如Eric提倡我们要去发现隐式概念一般,这次重读也让我发现了许多隐藏的DDD知识。恰好今日有朋友咨询我一些DDD问题,好似激活了触发器,随着问题的解答,我倒是在回答过程中又把这些知识梳理了一遍,才有了这篇杂记。问题一:Repositor...转载 2018-03-19 19:17:07 · 216 阅读 · 0 评论 -
抽象接口
8.1软件应变-随需而变,适者生存1.实现数据抽象,将接口与实现分离开来2. 抽象接口描述了一个类最本质的行为特征另一方面,具体实现随时可能变动,隐藏它们可以保证这种变动不会涉及客户代码3.过度设计会带来不必要的复杂和效率损失4.软件之变,体现在适应变化的能力5.许多编程思想包括OOP的思想都是以提高应变力为主题的,抽象与封装便是典型代表,抽象一个对象模型即是将一类对象最本原创 2013-02-02 16:41:42 · 456 阅读 · 0 评论 -
设计模式纵谈
19Observer分析依赖关系比如A依赖B,如果B变化,那么对A就会存在影响,所以会导致变化。在分析项目的时候,要这样考虑。对于B变化,怎样才能是A不变化,那就是A依赖的是稳定的,是抽象的是不变化的,那什么是不变化的,什么是稳定,就是接口。如何分析一个类的结构和关系要综合考虑这个类依赖的类,关联的类,当依赖的类和关联的类变化的时候,对于本类的影响。 接口是原创 2012-06-14 23:41:10 · 400 阅读 · 0 评论 -
设计模式纵谈--Interpreter,Iterator
16.Interpreter解释器(行为模式)Motivation 将问题抽象为语言。Intent给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。喜欢的方式是扩展而不是修改。对于变化的东西,用封装。对于不变的东西,不需要做变化封装。Interpreter模式比较适合简单的文法表示,对于复杂的文发表示,原创 2012-06-03 17:57:51 · 418 阅读 · 0 评论 -
Java程序员应该了解的10个面向对象设计原则
Java程序员应该了解的10个面向对象设计原则面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不转载 2012-05-12 00:09:34 · 630 阅读 · 0 评论 -
设计模式纵谈-Decarator,Facade,FlyWeight,Template Method,Command
10 Decarator 子类复子类,子类何其多假如我们需要为游戏开发开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能:比如红外线夜视功能,比如卫星定位等等。Motivation上述描述的问题根源在于我们 过度地使用了继承扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增原创 2012-05-29 20:19:54 · 407 阅读 · 0 评论 -
设计模式纵谈--bridge and composite
8.Bridge桥接模式面向对象复用举例来说假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都是同样的类型,面临同样的功能需求变化,比如坦克可能有多种不同的型号:T50,T75,T90对于其中的坦克设计,我们可能很容易设计出来一个Tank的抽象基类,然后各种不同型号的Tank继承自该类。public abstract class Tank{ abstract Sho原创 2012-05-08 20:22:01 · 441 阅读 · 0 评论 -
设计模式纵谈--单件模式
模式分类从目的来看:--创建型模式:负责对象创建。--结构型模式:处理类与对象间的组合。 组合和继承--行为型模式:类与对象交互中的职责分配。组件之间的行为。隔离变化 封装变化从范围来看:--类模式处理类与子类的静态关系。--对象模式处理对象间的动态关系。动机 Motivation在软件系统中,经常有这样一些特殊类,必须保证它们在系统原创 2012-04-23 23:12:13 · 434 阅读 · 0 评论 -
设计模式纵谈1
设计模式简介每一个模式描述在我们身边不断重复发生的问题以及该问题的解决方案设计模式描述软件设计过程中某一常见问题的一般性解决方案面向对象设计模式描述了面向对象设计过程中,特定场景下类和相互通信对象之间常见的组织关系.设计模式和面向对象面向对象设计模式解决的是类和相互通信对象之间的组织关系,包括他们的角色,指责,协作方式几个方面。面向对象的设计模式是好原创 2012-04-22 21:24:04 · 436 阅读 · 0 评论 -
设计模式纵谈--7.Adapter适配器(结构型模式)
7.Adapter适配器(结构型模式)适配(转换)的概念无处不在适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。Motivation在软件系统中,由于应用环境的变化,常常需要将 一些现存的对象 放在新的环境中应用,但是新环境要求的解决是这些现存对象所不满足的。如果应对这种 迁移的变化?如果既能利用现有对象的良好接口,同时有能满足新的应有环境所要求的原创 2012-05-03 21:45:28 · 415 阅读 · 0 评论 -
设计模式纵谈4-Builder
3.Builder生成器(创建型模式)Builder模式的缘起.假设创建游戏中的一个房屋House设施,该House有几个部分组成,且各部分富于变化。.如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正。。。。动机 motivation在软件系统中,有时候面临着 一个复杂对象 的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变原创 2012-04-30 00:12:18 · 437 阅读 · 0 评论 -
设计模式纵谈5-Factory
4.Factory Method工厂方法模式结构和代码往往不是设计模式最重要的东西。设计模式是解决变动需求。从耦合关系谈起耦合关系直接决定软件面对变化时的行为。设计模式是研究模块和模块之间的关系。模块的划分。--模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改。--模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块原创 2012-04-30 00:13:36 · 417 阅读 · 0 评论 -
设计模式纵谈3-abstract factory
2、Abstract Factory 抽象工厂new的问题常规的对象创建方法://创建一个Road对象Road raod = new Road(); 【如果客户程序有很多地方调用此处,如果需要变化,改动的地方很多,如果集中在一处(封装变化),则修改少】new的问题:--Singleton中:任何地方都可以new,无法确认唯一。--实现依赖,不能应对“具体实例化类型原创 2012-04-30 00:10:36 · 426 阅读 · 0 评论 -
设计模式纵谈-6.Prototype模型
6.Prototype模型http://forum.sucent.com OO要解决的问题就是需求的变化对软件的看法应该是动态的。也不是静态的结构。依赖关系的倒置抽象不应该依赖于实现细节,实现细节应该依赖于抽象。Motivation在软件系统中,经常面临着 某些结构复杂的对象 的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比原创 2012-04-30 00:30:22 · 658 阅读 · 0 评论 -
java设计模式推荐阅读
http://www.jdon.com/designpatterns/index.htm板桥里人(彭晨阳)的GOF设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善。也欢迎各大企业直接联系彭晨阳开展企业上门模式架构培训,短时间内快速掌握模式架构。原创 2012-04-01 12:34:24 · 572 阅读 · 0 评论 -
面向对象设计原则小结 (未完)
面向对象设计原则小结一。SRP 单一职责原则一个类最多只有一个可以变化的职责一个类只会受一个变化的影响一个继承等级结构只有一个可以变化的地方说到这里,先来说说接口,这些体会是从阎宏的和自己的体会接口可以分为java的接口和接口,所谓java的接口,就是满足java语法和定义,而接口是广义的,表示一些契约,也可理解为服务,角色,责任,定义了方法的集合对于java中原创 2011-11-09 10:51:20 · 459 阅读 · 0 评论 -
设计模式经典解释
设计模式经典解释 2009-11-19 来源:网络 创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和转载 2011-11-09 16:01:24 · 496 阅读 · 0 评论 -
继承机制
9.1继承关系--继承财富,更要继承责任预览1.接口继承不是为了代码重用,而是为了代码被重用。2.实现继承消费可重用旧代码,接口继承生产可重用的新代码3.不要问系统能为你做些什么,而要问你能为系统做些什么4.与其说继承是一种is-a或is-a-kind-of的关系,不如说继承是一种behaves-like-a或is-substitutalbe-for的关系1.在UM原创 2013-02-02 17:48:53 · 497 阅读 · 0 评论 -
慎用继承
1.类继承在继承实现的同时也继承接口,因此,如果主要目的是继承实现,那么采用继承就是不当之举2.JDK的开发者也会出现问题java.util.Properties类,设计者选择让他继承HashTable类。表面上这种设计不算离谱。properties比hashtable多了两个要求可持久化和可人工读写。对于前者,只须增加一些诸如store.load的接口即可。但对于后者,则要求原创 2013-02-02 18:40:11 · 759 阅读 · 0 评论 -
构建易维护代码的9条最佳实践摘要
·1.在问如何做之前,先要问做设么,为什么做,给谁做。2.在打破规则之前必须要理解它们3.作为软件开发者,我们希望了解产品负责人和客户需要什么,以及为什么需要,而且我们想知道这些东西是为who而做的,我们并不希望它们告诉我们如何做 涉及利益4.作为一个专业的开发者,工作的时间越长,就越会从商业角度看待问题,在商业中,我们需要关注两件基础的事物:价值和风险5.5个为什么通常表面上都问题都不是真正的...原创 2018-03-18 13:15:36 · 401 阅读 · 0 评论 -
迪米特法则(Law of Demeter)与领域模型行为
在领域模型的行为设计中我们提到2013-04-22 15:37 "@banq"的内容我们把A对象自身固有行为看成是A的一种能力,而把需要依赖其他对象的方法称为交互行为。哪些属于A的自身方法?哪些属于交互方法?设计思路和方法是如何考虑的? ...那么什么是对象的固有行为?我们认为是那些保证该对象逻辑一致性的行为,称为对象的基本职责,保证自己的存在。迪米特法则(Law转载 2017-07-03 16:17:27 · 624 阅读 · 0 评论 -
软件的复杂性与构造定律
快看!看!深入研究自然,你就会明白一切。 - 爱因斯坦复杂性是被低估的。复杂越高,开发人员会感到不安。对其的理解认知负荷代价就越高,我们就更不快乐。真正的挑战是在构建我们的系统时要保持其有序以及工程师的生产方式。对于这一点,一个简单的物理规律可以帮助我们:构造定律 the Constructal Law.当我们拥有臃肿大量的组件和类时,其中每一个又由大量的职责行为功能组成,我们不会转载 2017-07-03 15:51:36 · 682 阅读 · 0 评论 -
软件设计发展路线
1.面向过程2.OO3.设计模式4.设计原则SOLID + TDA + Lod5.DDD6.DCI.DSL转载 2017-04-23 18:04:10 · 512 阅读 · 0 评论 -
代码整洁之道--对象和数据结构体会
1.模块不应该了解它所操作对象的内部情形。对象隐藏数据,暴露操作,这意味对象不应该通过存取器暴露其内部结构因为这样更像是暴露而非隐藏其内部结构。对象应该暴露行为,而不是数据。迪米特法则类C的方法f只应该调用一下对象的方法C由f创建的对象作为参数传递给f的对象c的实体持有的对象方法不应该调用任何函数返回对象的方法,不要和陌生人说话final S原创 2017-03-25 12:18:34 · 407 阅读 · 0 评论 -
思考软件,创新设计摘要
1.A段架构师偏于获利,而B段架构师偏于成本思维2.面对复杂,唯有简单 享受从简单中叫出复杂的满足感如:牛顿和爱因斯坦的简单公式 F = ma E=mc2 从复杂中设计出简单车同轨,诗同文3.一项物品到底到底是虚还是实?并非本质,而只是相对的观点或视角而已。4.软件美何在,把酒问对称两个或多个实现子类的对称性,其幕后的接口的不变形,就蕴含原创 2017-03-19 17:28:45 · 868 阅读 · 0 评论 -
代码的整洁之道
1.函数 只做一件事情,函数应该做一件事情。做好这件事情。只做这件事情。 如果函数只是做了该函数名下同一抽象层上的步骤,则函数还是做了一件事。编写函数毕竟是为了把大一些的概念拆分为另一抽象层上的一系列步骤。 所以要判断函数是否不止做了一件事情,还有一个办法,就是看是否能在拆分有一个函数,该函数不仅只是单纯地重新诠释其实现。每个函数一个抽象层级 自顶原创 2017-03-05 22:13:09 · 439 阅读 · 0 评论 -
代码整洁之所以重要的七个理由
代码整洁之所以重要的七个理由投递人 itwriter 发布于 2014-03-17 11:49 评论(7) 有1397人阅读 原文链接 [收藏] « » 英文原文:7 reasons clean code matters By Cory House 首先要承认,大学毕业的时候我是个糟糕的程序员。我拿到了学位,学到了一大堆书本知识,然后,我开始做转载 2014-03-17 22:15:28 · 737 阅读 · 0 评论 -
google java编码规范
http://google-styleguide.googlecode.com/svn/trunk/javaguide.html转载 2014-02-13 21:29:24 · 2113 阅读 · 1 评论 -
OO系统设计师之路--分析模型
OO系统设计师之路--分析模型 2009-05-04 作者:coffeewoo 来源:itpub.net (1)--什么是分析模型 分析模型是采用分析类,在系统架构和框架的约束下,来实现用例场景的产物。 分析模型是高层次的系统视图,在语义上,分析类不代表最终的实现。它是计算机系统元素的高层抽象。转载 2013-08-01 00:54:44 · 1492 阅读 · 0 评论 -
设计原则
2.1间接原则 1.任何计算机问题均可通过增加一个间接层来解决2.间接层的例子文件系统中的了路径,HTTp中的 URI,数据库中的外键。程序中的遍历等都具有指代作用。3.抽象的意义在于:一方面掩盖了具体的细节。提高代码的简洁渡,另一方面赋予明确的语义,提高代码的清晰度,而间接层的意义在于:一方面建立了名与实的映射,提高代码的一致性和可维护性。另一方面实现名与实的原创 2013-02-03 21:02:13 · 505 阅读 · 0 评论 -
依赖原则
2.2依赖原则1.接口一方面作为抽象类型,描述了一类对象所遵循的行为规范,另一方面作为间接层,把两个耦合的具体类进行分离。2.高层模块不应该依赖底层模块,它们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象3.依赖不会消失只会转移,责任和权利也一样4.抽象与规范时根本,间接和分离是手段。依赖和控制是关键,接口和服务时核心5.接口一种抽象,因为原创 2013-02-03 21:21:17 · 699 阅读 · 0 评论 -
多态机制
10.1多态类型-静中之动1.继承时多态的基础,多态是继承的目的2.职责分离的好处,没有绝对的对和绝对的错,分析的角度不同3.正如子类型应遵守超类型的规范。同名的函数或方法也应该遵循相同的规范。如果为贪图取名的方便而滥用重载,早晚会因小失大。10.2抽象类型1.抽象是个相对的概念,一个类型是否是抽象的完全取决于设计者对它的角色定位。如果想用它来创建对象,它就是实原创 2013-02-03 20:50:49 · 543 阅读 · 0 评论 -
访问控制-代码的多级管理
8.2控制访问1.任何一门技艺到了高级阶段,都是度的学问2.客户识客户意识的缺少有几种原因:首先,不是每个人都有机会开发大型,关键的软件,许多程序员的客户主要是他自己或少数几个开发组成员,修改软件影响到的代码不多,影响到的人也不多,没有真正吃过设计不当的苦头。其次,开发库和框架的人毕竟是少数,大多数人开发的代码主要是自己调用或直接针对终端消费者的。即使他们写了一些重用代码原创 2013-02-02 17:05:28 · 708 阅读 · 0 评论 -
封装隐藏--包装的讲究
7.3封装隐藏 1. 信息隐藏是一种原则,而封装是实现这种原则的一种技术2.抽象意味着用户可以从高层的接口来看待或者使用一类对象,而不用关心他的底层实现,而黑盒封装意味着用户不需要也无权访问底层3.访问控制不仅是一种语法限制,也是一种语义规范--标有public的是接口,标有private的是实现,泾渭分明。4代码例子class Person{ private Da原创 2013-02-02 16:25:41 · 520 阅读 · 0 评论 -
数据抽象-做什么重于怎么做
7.2数据抽象1.数据结构强调具体实现 抽象数据类型强调抽象接口2.用户不应该知道也不必知道他的具体实现。只能通指定接口进行 暗箱操作。这样经过数据抽象,队列的本质特征有API 展现。非本质特征屏蔽于客户的视野之外3.许多程序员都有一个通病:重实现,轻接口,在编写代码时表现为:不等接口设计好就难忍开始大干。在阅读代码的时候表现:看到API文档便昏昏欲睡。看到代码就两眼放光原创 2013-02-02 16:09:56 · 732 阅读 · 0 评论 -
抽象机制与对象范式-抽象封装
7抽象封装7.1抽象思维:减法和除法的学问1.抽象思维能力是最重要的2.抽象:去粗取精以化繁为简,由表及里以异中求同,抽象就是做减法和除法。 减法好理解:通过甄选减去非本质和无关紧要的部分,着眼于问题的本质,即除粗取精。 通过现象看本质,发现不同事物之间的相同之处,即异中求同,同类归并,那就是除法3.抽象有角度之分。相同的实体经过不同的角度抽象的模型也会不同。特定的环境原创 2013-02-02 15:56:13 · 664 阅读 · 0 评论 -
重构笔记
1. 重构是在不改变软件可观察行为的前提下改善其内部结构. 2. 不改变软件行为只是重构的最基本要求。要想真正让重构技术发挥威力,就必须做到 不需要了解软件行为 听起来很荒谬,但事实如此。如果一段代码能让你很容易了解其行为,说明它还不是那么迫切需要被重构。哪些最需要重构的代码,你只能看到其中的坏味道,接着选择对应的重构手法来消除这些坏味道,然后才可能理解它的行为。而这整个过原创 2011-11-03 13:44:33 · 1473 阅读 · 0 评论 -
面向对象建模与数据库建模的比较
<br />面向对象模型(Class Model)<br /> 类代表一个对象类型,类在代码运行阶段将被创建为一个个对象实例, 每个类由两个部分组成:属性和行为,属性通常是一些数据状态值,也就是说:类将数据封装隐藏在自己内部了, 访问这些数据属性必须通过类公开的方法,或者接口。<br /> 别小看这样一个小小包装,却决定了以后代码的维护性和扩展性, 打个比喻,日常生活中我们经常用各种盒子和袋子包装一些东西,这样做就是为了方便这些东西的携带或储藏,小到生原创 2011-05-30 11:27:00 · 668 阅读 · 0 评论 -
面向对象的系统开发方法
<br />一面向对象的基本概率<br />1.面向对象是一种认识客观世界的世界观,是从结构组织角度模式客观世界的一种方法,人们在认识和理解现实世界中,普遍运用一下三种构造方法<br />《1》区分对象和属性 如区分车和车得大小<br />《2》区分整体对象和组成对象 如区分车和车轮<br />《3》不同对象的类区分和形成 如所有的车类和轮船类<br /> <br />2.面向对象的特征<br />《1》封装<br />《2》继承<br />《3》多态:同一个消息发送给不同的类或对象可引起不同的操作<br原创 2011-05-30 11:13:00 · 855 阅读 · 0 评论 -
应用OOP的设计过程演化(一)
<br /> 面向对象的程序设计(Object-Oriented Programming,简记为OOP)立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。<br /> 在计算时代的早期,程序员基于语句思考编程问题。到了20世纪七八十年代,程序员开始基于子程序去思考编程。进入21原创 2011-05-30 11:33:00 · 514 阅读 · 0 评论