http://www.iteye.com/topic/376865
原型模式其实是从一个对象再创建另个一个可定制的对象,
而且不需知道任何创建的细节。
一般在初始化的信息不发生变化的情况下,克隆是最好的办法。
既隐藏了对象创建的细节,又对性能是大大的提高。
相当于不用重新初始化对象,而是动态地获得对象运行时的状态。
浅复制与深复制
如果字段是值类型的, 则对该字段执行逐位复制,
如果字段是引用类型,则复制引用但不复制引用的对象,因此,原始对象
及其复本引用同一对象。
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,
而所有的对其他对象的引用都仍然指向原来的对象。
另一种需求:把要复制的对象所引用的对象都复制一遍。
深复制:深复制把引用对象的变量指向复制过的新对象,而不原有的被引用的对象。
--------------------------------------------------------------------------
模板方法模式
既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的
代码都应该要上升到父类去,而不是证每个子类都 去重复。"
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细
的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
模板方法模式就是提供了一个很好的代码复用平台。
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中
重复出现。我们通过模板方法械把这些行为搬移到单一的地方,这样就帮助了类摆脱重复的不变行为的纠缠。
--------------------------------------------------------------------------------
迪米特法则(最少知识原则):
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
迪米特法则其根本思想,是强调了类之间的松耦合。
类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类
造成波及。
--------------------------------------------------------------------------------
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,
这个接口使得这一子系统更加容易使用。
首先, 在设计初期阶段,应该要有意识的将不同的两个层分离,
层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合
大大降低。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂。增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。第三,在维护一个遗留的大型
系统时,可能这个系统已经非常难以维护和扩展了。
为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
--------------------------------------------------------------------------------
建造者模式:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,
而具体建造过程和细节就不需知道了。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
builder是为创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是什么呢?
对的,它是具体建造者,实现Builder接口,构造和装配各个部件。
Director指挥者,它是构建一个使用Builder接口的对象.
该模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,
但对象内部的构建通常面临着复杂的变化。
建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
----------------------------------------------------------------------------------
观察者模式又叫做发布-订阅(Publish/Subscribe)
模式
观察者模式定义了一种一对多的依赖关系,让多个
观察者对象
同时监听某一个主题对象。这个主题对象在状态发
生变化时,会通知所有观察对象,使它们能够自动
更新自己。
将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象
间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护,扩展和重用都带来不便
当一个对象的改变需要同时改变其他对象的时候就需要用到观察者模式。
而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式,还有吗?
一个抽象模型有两个方面,其中一方面依赖于另一方面,这时用观察者模式可以将
这两者封装在独立的对象中使它们各自独立地改变和复用。
观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖
于具体,从而使得各自的变化都不会影响另一边的变化。
------------------------------------------------------------------------
工厂方法模式
定义一个用于创建对象的接口,让子类
决定实例化哪一个类。
抽象工厂模式
抽象工厂模式Abstract Factory,
提供一个创建一系列相关或相互依赖对象的接口,
而无需要指定它们具体的类。
通常是在运行时刻再创建一个具体工厂类的实例,这个具体的工厂再创建
具有特定实现的产品对象,也就是说, 为创建不同的产品对象,客户端应使用不同
的具体工厂。
在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常
容易,它只需要改变具体工厂即可使用不同的产品配置。
它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,
产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
编程是门艺术,这样大批量的改动,显然是非常丑陋的做法。
一个程序员如果从来没有熬夜写程序的经历,不能算是一个好程序员,因为他没有
痴迷过,所以他不会有大成就。
面向对象设计其实就是希望做到代码的责任分解。
---------------------------------------------------------------------------
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其
类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。
把状态的判断逻辑转移到表示不同状态的一系列类当吕,可以把复杂的判断逻辑简化。
将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个
ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。
消除庞大的条件分支语句。来减少相互间的依赖
当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,
就可以考虑使用状态模式了。
-------------------------------------------------------------------
适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原来由于接口
不兼容而不能一起工作的那些类可以一起工作。
系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制
范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的
类,但是接口又与复用环境要求不一致的情况,
使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,
就应该考虑用适配器模式
两个类所做的事情相同或相似,但是具有不同的接口时要使用它。
客户代码可以统一调用同一接口就行了,可以更简单,更直接,更紧凑。
在双方都不太容易修改的时候再使用适配器模式适配。
事后控制不如事中控制,事中控制不如事前控制。
分享到:
相关推荐
"简单时间表-不知道是谁的了大家看看有用吗" 这个标题表明我们正在讨论一个关于时间管理的小程序。"简单时间表"可能是该程序的名字,它暗示了这个工具的设计初衷是为了帮助用户简洁高效地管理他们的时间。标题中的...
【易语言迅雷看看播放电影源码】是一个基于易语言编程环境开发的视频播放软件源代码,主要用于学习和研究易语言在多媒体领域的应用。易语言是中国本土开发的一种简单易学的编程语言,它以“易”为核心理念,使得编程...
这本书被赞誉为“一看便知的好书”,表明其内容清晰易懂,对于学习者来说是一份宝贵的资源。PDF阅读器的提及意味着资料是以电子版的形式存在,便于在电脑或移动设备上查阅和学习。 信号处理的基础概念包括模拟信号...
李开复建议在校大学生应该读的书当你走进图书馆不知道看什么书的时候,就看看这个吧,很有帮助的!.doc
"经典迷人ppt模板,看看便知道"这一标题暗示了我们正在讨论的是一套具有高度吸引力和广泛适用性的PPT模板,它可能包含了一系列设计精美、布局合理的幻灯片模板,适合多种场合,如商业报告、学术演讲、产品推介等。...
thinkphp 三级联动 省份 城市 区 有同学TP三级联动添加实现了,但是不知道如何修改,那就下载看看就会修改了,有注释 有数据库 数据库很全,亲测能添加修改,有控制器方法代码,前后端加数据库,完美运行.
这是本新书,有中文版。我看了下内容,挺好的,介绍了用Midp1.0实现2.0的Game...不知道站上有没有人发过。个人觉得很有参考价值。为论坛做贡献,把连接发上来吧。希望斑竹能注意一下。 这书真的不错,给大家推荐一下。
大家都知道迅雷无论是影片的更新速度和稳定性都是其他P2P无法比的 本小偷的全部影视节目同步迅雷网站更新 共抓取迅雷的电影,电视剧,综艺3个频道 动漫频道有些繁琐,稍后会添加,敬请大家留意 废话不多说... 好...
【实务】不知道如何把握谈话提醒,必看此文:高人.docx
你还不知道如果开始您的系统用例分析吗?那么强烈建议您看看这本《用例分析技术》 在一个需求分析过程中,主要有项目描述,风险分析,用例图以及描述,项目建议这几部分。 其中最重要的,也是最需要学习的...
普通人不知道的20个WinXP秘密,好好看看吧。
在家都知道vod_cache_data是迅雷看看的缓存文件存放地。迅雷会自动选择用户机器剩余空间最大的分区进行保存,文件大小在100M以上.每次手动很麻烦.如果长期不清会影响计算机的速度。在这里有个方法能一键清除缓存
首先,让我们详细了解一下这些模板通常包含的部分: 1. **项目启动文档**:在项目开始时,需要明确项目的目标、范围、预期成果和可行性。这包括项目背景、目标陈述、项目组织结构以及初步的时间表和预算。 2. **...
【标题】"TXT文本阅读器来 看看a" 提供的信息暗示我们讨论的是一个用于查看TXT文本格式的阅读工具。TXT文件是最基础的文本格式,通常无任何格式修饰,仅包含纯文本内容。这样的阅读器可能设计简单,旨在方便用户快速...
不看不知道,看了下一跳,这书真奇妙 第一章 程序漫谈 对于计算机,也许你是老鸟,也许你是菜鸟…… 第二章 编程环境 我们什么编程基础都还没有掌握,能驾驭好这个巨人吗? 第三章 计算机原理 给你一个苹果你的处理...
本教程看过就知道 他会教会你怎么做! 加油吧~
看 看 这里有很多,不知道你以哪种方式购买,价格也不一看 看 这里有很多,不知道你以哪种方式购买,价格也不一看 看 这里有很多,不知道你以哪种方式购买,价格也不一看 看 这里有很多,不知道你以哪种方式购买,...
很好用的就是可以看到swf里面你想知道但看不到的东西
最好的加密软件,而且看不岀文件已加密 秘密档案想不给人知道吗?本人用过好多方法,也试过很多工具. 隐藏?现在已经无效吧. 改注册文件达到无法显示目的?很容易让人知道 用加密大师那些软件?程序又大,又会让人知道...