首页 设计模式学习笔记-命令模式

设计模式学习笔记-命令模式

举报
开通vip

设计模式学习笔记-命令模式设计模式学习笔记-命令模式 设计模式学习笔记 1. Command模式------命令模式 1.1. 定义 命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持科撤销的操作。 1.2. 优点与缺点 1.1.1 优点 提供了用统一方法执行不同行为的简单机制。 允许在运行时改变所处理的请求,以及如何处理请求。 仅仅需要很少的代码实现。 1.1.2 缺点 当条件调度程序已经足够的时候,会增加设计的复杂度。 1 设计模式学习笔记 1.3. UML图 2 ...

设计模式学习笔记-命令模式
设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 模式学习笔记-命令模式 设计模式学习笔记 1. Command模式------命令模式 1.1. 定义 命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持科撤销的操作。 1.2. 优点与缺点 1.1.1 优点 提供了用统一方法执行不同行为的简单机制。 允许在运行时改变所处理的请求,以及如何处理请求。 仅仅需要很少的代码实现。 1.1.2 缺点 当条件调度程序已经足够的时候,会增加设计的复杂度。 1 设计模式学习笔记 1.3. UML图 2 设计模式学习笔记 1.4. UML例子图 1.1.3 用Command替换条件调度 3 设计模式学习笔记 1.1.4 《head first设计模式》Command例子类图 1.5. 要点 , 命令模式将发出请求的对象和执行请求的对象解耦。 , 在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装 了接收者和一个或一组动作。 , 调用者通过调用命令对象的execute()发出请求,这会使得接收者 的动作被调用。 , 调用者可以接受命令当做参数,甚至在运行时动态地进行。 , 命令可以支持撤销,做法是实现一个undo()方法来回到execute() 被执行前的状态。 , 宏命令是命令的一种简单的延伸,允许调用多个命令。宏方法也 可以支持撤销。 , 实际操作时,很常见使用“聪明”命令对象,也就是直接实现了 请求,而不是将工作委托给接受者。 4 设计模式学习笔记 , 命令也可以用来实现日志和事务系统。 1.6. 动机 许多系统都会收到、发送并处理请求。条件调度程序是一条条件语句,它用来执行请求的发送和处理。有些条件调度程序很适合它们要完成的任务。有些则并不适合。 适合任务的条件调度程序往往只是把少量的请求发送到少量的处理逻辑中。这种调度程序的代码往往可以在一屏内显示,我们不需要滚动屏幕。通常情况下,用Command模式替换这种条件调度程序并没有什么益处。 另一方面,即使条件调度程序很小,它也可能不适合你的系统。把条件调度程序重构为基于Command的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,有两个最常见的理由。 1) 缺少足够的运行时灵活性。依赖于条件调度程序的客户代码需 要用新的请求或处理逻辑动态的配置这个条件调度程序。然 而,这个条件调度程序并不支持这种动态的配置,因为所有的 发送和处理逻辑都被硬编码在 单一的条件语句中。 2) 代码体的膨胀。有些条件调度程序会变得巨大而笨拙,因为它 们会逐渐增加对新请求的处理或者处理逻辑会因 职责 岗位职责下载项目部各岗位职责下载项目部各岗位职责下载建筑公司岗位职责下载社工督导职责.docx 的增加 而变得更复杂。把处理逻辑提取到不同的方法中并不会有很大 的帮助,因为包含条件调度程序和提取出的方法的类仍然太庞 大。 5 设计模式学习笔记 Command模式为这种问题提供了极好的解决方案。为了实现它,只需要简单把每块请求处理逻辑放到一个单独的“命令”类中,这个类有一个通用的方法,如execute()或run(),用来执行它所封装的处理逻辑。一旦有了这样一批命令类,就可以用一个集合来存储、获取它们的实例;添加、删除或修改实例;并通过调用它们的执行方法执行这些实例。 用一种统一的方法发送请求并执行不同的行为,对设计来说是如此的重要,以至于你可能会发现自己已经直接使用了Command模式,而不是过后进行重构。我开发过得许多服务端的、基于web的系统都使用了Command模式为发送请求、执行动作或转发动作提供一种 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 方法。 《设计模式》的作者解释了如何用Command模式来支持撤销操作/恢复操作。在极限编程周期中经常会产生的一个问题是,当你不清楚一个系统是否需要撤销/恢复操作功能时,应该怎么办。是完全实现Command模式以防万一,还是完成完全实现Command模式,即使这样做违反了“你根本不需要它”,这个XP原则告诫我们不要为代码添加基于臆测的、实际上不需要的功能。如果不清楚一个系统是否需要Command模式,我一般不会实现它,因为在需要时实现这个模式并不困难。然而,如果代码变得越来越难以重构实现Command模式,并且之后需要撤销/恢复操作功能的机会很大,那么在变得困难之前重构实现就很有意思了。这很像上保险。 6 设计模式学习笔记 Command模式很容易实现,很通用,也非常有用。 1.7. 代码重构示例 见《重构与模式》7.6章节。 1.1.1 做法 1、在包含条件调度程序的类中找到处理请求的代码,在这段代码 上应用提炼方法重构,直到产生执行该代码行为的执行方法为止。 2、重复步骤1,把所有剩余的请求处理代码提炼到各自的执行方 法中。 3、在每个执行方法上应用提炼类重构,产生处理请求的具体命 令。通常的做法是把具体命令中的执行方法声明为公共。如果在 新的具体命令中的执行方法过于庞大或难于理解,应用组合方法 重构。 创建了所有具体命令之后,寻找它们中的重复代码。如果存 在重复代码,考虑是否可以通过应用形成Template Method重构去 除它。 4、定义一个命令,及声明了与每个具体命令相同的执行方法的接 口或抽象类。为实现这一步,需要分析具体命令,找到它们独特 或相似的地方。找到下面问题的答案。 必须为通用执行方法传入什么参数, 在具体命令的构造过程中,可以传入什么参数, 7 设计模式学习笔记 通过回调参数,而不是直接传入数据,具体命令可以获得什 么信息, 这个执行方法的最简签名是什么, 考虑在具体命令上应用提炼超类重构或提炼接口重构,产生命令 的早期版本。 5、使每个具体命令都实现或继承这个命令,并用命令类型更新所 有具体命令的客户代码。 6、在包含条件调度程序的类中,定义并组装一个命令映射,这个 映射包含每个具体命令,并用唯一标识符作为主键,在运行时可 以用这个主键获取命令。 如果具体命令很多,那么为命令映射添加具体命令的代码也 会很多。在这种情况下,考虑把具体命令实现为Plugin模式,这 个模式来自Patterns of Enterprise Application Architecture。这样就 可以通过提供适当的配置数据来简单地装载它们(例如,命令类 的名字列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf ,类所在的目录更好)。 7、在包含条件调度程序的类中,把调度请求的条件代码替换为获 取正确的具体命令并调用其执行方法的代码。这个类现在就是一 个Invoker了。 1.1.2 重构示例 1.1.1.1. 原代码 public class CatalogApp { private HandlerResponse executeActionAndGetResponse(String 8 设计模式学习笔记 actionName, Map parameters){ if(NEW_WORKSHOP.equals(actionName)){ String nextWorkshopID = this.workshopManager.getNextWorkshopID(); StringBuffer newWorkshopContents = workshopManager.createNewFileFromTemplate( nextWorkshopID, workshopManager.getWorkshopDir(), workshopManager.getWorkshopTemplate() ); workshopManager.addWorkshop(newWorkshopContents); parameters.put("id", nextWorkshopID); executeActionAndGetResponse(ALL_WORKSHOP, parameters); }else if(ALL_WORKSHOP.equals(actionName)){ XMLBuilder allWorkshopsXml = new XMLBuilder("workshops"); WorkshopRepository respository = workshopManager.getWorkshopRepository(); Iterator ids = respository.keyIterator(); while(ids.hasNext()){ String id = (String)ids.next(); Workshop workshop = respository.getWorkshop(id); allWorkshopsXml.addBelowParent("workshop"); allWorkshopsXml.addAttribute("id", workshop.getID()); allWorkshopsXml.addAttribute("name", workshop.getName()); allWorkshopsXml.addAttribute("status", workshop.getStatus()); allWorkshopsXml.addAttribute("duration", workshop.getDurationAsString()); } String formattedXml = getFormattedData(allWorkshopsXml.toString()); return new HandlerResponse(new StringBuffer(formattedXml), ALL_WORKSHOP_STYLESHEET); }// ...many more 'else if' statements ...... 1.1.1.2. 首先处理条件语句的第一段应用提炼方法重构,产生执行 方法getNewWorkshopResponse() public class CatalogApp { private HandlerResponse executeActionAndGetResponse(String 9 设计模式学习笔记 actionName, Map parameters){ if(NEW_WORKSHOP.equals(actionName)){ getNewWorkshopResponse(parameters); }else if(ALL_WORKSHOP.equals(actionName)){ ... } ... private void getNewWorkshopResponse(Map parameters) { String nextWorkshopID = this.workshopManager.getNextWorkshopID(); StringBuffer newWorkshopContents = workshopManager.createNewFileFromTemplate( nextWorkshopID, workshopManager.getWorkshopDir(), workshopManager.getWorkshopTemplate() ); workshopManager.addWorkshop(newWorkshopContents); parameters.put("id", nextWorkshopID); executeActionAndGetResponse(ALL_WORKSHOP, parameters); } 1.1.1.3. 现在,继续提炼处理请求代码的下一段,它处理目录中所 有课程的排列 public class CatalogApp { private HandlerResponse executeActionAndGetResponse(String actionName, Map parameters){ if(NEW_WORKSHOP.equals(actionName)){ getNewWorkshopResponse(parameters); }else if(ALL_WORKSHOP.equals(actionName)){ return getAllWorkshopsResponse(); }// ...many more 'else if' statements return null; } private HandlerResponse getAllWorkshopsResponse() { XMLBuilder allWorkshopsXml = new XMLBuilder("workshops"); WorkshopRepository respository = workshopManager.getWorkshopRepository(); Iterator ids = respository.keyIterator(); while(ids.hasNext()){ String id = (String)ids.next(); 10 设计模式学习笔记 Workshop workshop = respository.getWorkshop(id); allWorkshopsXml.addBelowParent("workshop"); allWorkshopsXml.addAttribute("id", workshop.getID()); allWorkshopsXml.addAttribute("name", workshop.getName()); allWorkshopsXml.addAttribute("status", workshop.getStatus()); allWorkshopsXml.addAttribute("duration", workshop.getDurationAsString()); } String formattedXml = getFormattedData(allWorkshopsXml.toString()); return new HandlerResponse(new StringBuffer(formattedXml), ALL_WORKSHOP_STYLESHEET); } 1.1.1.4. 现在开始创建具体命令。先在具体方法 getNewWorkshopResponse()上应用提炼类重构,产生具 体命令NewWorkshopHandler public class CatalogApp { public HandlerResponse executeActionAndGetResponse(String actionName, Map parameters){ if(NEW_WORKSHOP.equals(actionName)){ return new NewWorkshophandler(this).getNewWorkshopResponse(parameters); }else if(ALL_WORKSHOP.equals(actionName)){ return getAllWorkshopsResponse(); }// ...many more 'else if' statements return null; } private HandlerResponse getAllWorkshopsResponse() { XMLBuilder allWorkshopsXml = new XMLBuilder("workshops"); WorkshopRepository respository = workshopManager.getWorkshopRepository(); Iterator ids = respository.keyIterator(); while(ids.hasNext()){ String id = (String)ids.next(); Workshop workshop = respository.getWorkshop(id); allWorkshopsXml.addBelowParent("workshop"); allWorkshopsXml.addAttribute("id", workshop.getID()); allWorkshopsXml.addAttribute("name", workshop.getName()); 11 设计模式学习笔记 allWorkshopsXml.addAttribute("status", workshop.getStatus()); allWorkshopsXml.addAttribute("duration", workshop.getDurationAsString()); } String formattedXml = getFormattedData(allWorkshopsXml.toString()); return new HandlerResponse(new StringBuffer(formattedXml), ALL_WORKSHOP_STYLESHEET); } -- NewWorkshophandler 类 public class NewWorkshophandler { private CatalogApp catalogApp; public NewWorkshophandler(CatalogApp catalogApp) { this.catalogApp = catalogApp; } public HandlerResponse getNewWorkshopResponse(Map parameters) { String nextWorkshopID = workshopManager().getNextWorkshopID(); StringBuffer newWorkshopContents = workshopManager().createNewFileFromTemplate( nextWorkshopID, workshopManager().getWorkshopDir(), workshopManager().getWorkshopTemplate() ); workshopManager().addWorkshop(newWorkshopContents); parameters.put("id", nextWorkshopID); return this.catalogApp.executeActionAndGetResponse(CatalogApp.ALL_WORKSHOP, parameters); } private WorkshopManager workshopManager(){ return this.catalogApp.getWorkshopManager(); } } 在继续重构之前,在NewWorkshophandler的执行方法上应用组合方法重构,如下: public class NewWorkshophandler { private CatalogApp catalogApp; public NewWorkshophandler(CatalogApp catalogApp) { 12 设计模式学习笔记 this.catalogApp = catalogApp; } public HandlerResponse getNewWorkshopResponse(Map parameters) { createNewWorkshop(parameters); return this.catalogApp.executeActionAndGetResponse(CatalogApp.ALL_WORKSHOP, parameters); } private void createNewWorkshop(Map parameters) { String nextWorkshopID = workshopManager().getNextWorkshopID(); workshopManager().addWorkshop(newWorkshopContents(nextWorkshopID)); parameters.put("id", nextWorkshopID); } private StringBuffer newWorkshopContents(String nextWorkshopID) { StringBuffer newWorkshopContents = workshopManager().createNewFileFromTemplate( nextWorkshopID, workshopManager().getWorkshopDir(), workshopManager().getWorkshopTemplate() ); return newWorkshopContents; } private WorkshopManager workshopManager(){ return this.catalogApp.getWorkshopManager(); } } 对其他应该被提炼到自己的具体命令中的执行方法重复这一步骤,并用组合方法进行调试。 AllWorkshopsHandler是下一个被提炼的具体命令。代码如下: public class AllWorkshopsHandler { private CatalogApp catalogApp; public AllWorkshopsHandler(CatalogApp catalogApp) { this.catalogApp = catalogApp; } 13 设计模式学习笔记 public HandlerResponse getAllWorkshopsResponse() { String formattedXml = prettyPrint(); return new HandlerResponse(new StringBuffer(formattedXml) , CatalogApp.ALL_WORKSHOP_STYLESHEET); } private String prettyPrint() { String formattedXml = allWorkshopsData(); return formattedXml; } private String allWorkshopsData() { XMLBuilder allWorkshopsXml = new XMLBuilder("workshops"); WorkshopRepository respository = workshopManager().getWorkshopRepository(); Iterator ids = respository.keyIterator(); while(ids.hasNext()){ String id = (String)ids.next(); Workshop workshop = respository.getWorkshop(id); allWorkshopsXml.addBelowParent("workshop"); allWorkshopsXml.addAttribute("id", workshop.getID()); allWorkshopsXml.addAttribute("name", workshop.getName()); allWorkshopsXml.addAttribute("status", workshop.getStatus()); allWorkshopsXml.addAttribute("duration", workshop.getDurationAsString()); } String formattedXml = this.catalogApp.getFormattedData(allWorkshopsXml.toString()); return formattedXml; } private WorkshopManager workshopManager(){ return this.catalogApp.getWorkshopManager(); } } 1.1.1.5. 现在是创建命令的时候了。此刻,每个具体命令都有一个 名字不同的执行方法,并且这些执行方法的参数也不同。 public HandlerResponse executeActionAndGetResponse(String actionName, Map parameters){ 14 设计模式学习笔记 if(NEW_WORKSHOP.equals(actionName)){ return new NewWorkshopHandler(this).getNewWorkshopResponse(parameters); }else if(ALL_WORKSHOP.equals(actionName)){ return new AllWorkshopsHandler(this).getAllWorkshopsResponse(); }// ...many more 'else if' statements return null; } 创建一个命令需要决定如下问题: 通用执行方法的名字; 传入什么信息,或从每个handler获得什么信息。 这里选择的是通用执行方法的名字execute(通常Command模式经常使用的名字,但是绝不是唯一能用的名字)。现在必须决定调用execute()时需要传入或获得什么信息。观察NewWorkshopHandler和AllWorkshopsHandler具体的命令,需要了解如下的信息: 需要包含在名为parameters的map中的信息 返回类型为HandlerResponse的对象 这意味着命令必须包含这样的执行代码 public HandlerResponse execute(Map parameters) 这样就可以在NewWorkshopHandler上应用两个重构来创建这个命令。首先,把它的getNewWorkshopResponse(...)方法重命名为execute(...): public class NewWorkshopHandler { ... public HandlerResponse execute(Map parameters) { ... 然后,应用提炼超类重构产生名为Handler的抽象类: public abstract class Handler { protected CatalogApp catalogApp; public Handler(CatalogApp catalogApp) { this.catalogApp = catalogApp; } public abstract HandlerResponse execute(Map parameters); } public class NewWorkshopHandler extends Handler { public NewWorkshopHandler(CatalogApp catalogApp) { super(catalogApp); } ... 既然有了命令(及抽象Handler),令所有的处理程序实现这个命令。我们令所有的处理程序都扩展Handler类,并实现execute()方法。在完成这些修改之后,所有的处理程序就都可以 15 设计模式学习笔记 统一地被调用了: if(NEW_WORKSHOP.equals(actionName)){ return new NewWorkshopHandler(this).execute(parameters); }else if(ALL_WORKSHOP.equals(actionName)){ return new AllWorkshopsHandler(this).execute(parameters); }// ...many more 'else if' statements 1.1.1.6. 现在,有趣的事情来了。CatalogAPP的条件语句表现的就 像一个粗糙的Map。通过把命令保存在一个命令映射中。 将它变成真正的映射显然会更好。为了实现这一修改, 定义并组装了handlers,一个一处理程序名字为主键的 Map: public class CatalogApp { private Map handlers; public CatalogApp(){ ... createHandler(); ... } private void createHandler(){ this.handlers = new HashMap(); this.handlers.put(NEW_WORKSHOP, new NewWorkshopHandler(this)); this.handlers.put(ALL_WORKSHOP, new AllWorkshopsHandler(this)); ... } ... 因为处理的程序不是很多,就不必实现plugin模式了。新代码可以通过编译。 1.1.1.7. 最后,把CatalogApp中的庞大的条件语句替换为用名字查 找处理程序并执行处理程序代码: public HandlerResponse executeActionAndGetResponse(String actionName, Map parameters){ 16 设计模式学习笔记 Handler handler = lookupHandlerby(actionName); return handler.execute(parameters); } private Handler lookupHandlerby(String actionName) { return (Handler) this.handlers.get(actionName); } 现在,CatalogApp使用Command模式来执行动作并返回响应。在这种设计下,声明新的处理程序、命名处理程序以及把处理程序注册到命令映射中,以便在运行时执行操作就变得容易多了。 1.8. NoCommand NoCommand对象是一个空对象。当你不想返回一个有意义的对象时,空对象就很有用。客户也可以将处理null的责任转移给空对象。 1.9. 命令模式的更多用途 1.1.3 队列请求 1.1.4 日志请求 17 设计模式学习笔记 2. 附录 1.10. 面向对象基础 1.1.1 抽象 1.1.2 封装 1.1.3 多态 1.1.4 继承 1.11. 面向对象原则 1.1.1 封装变化 1.1.2 多用组合,少用继承 1.1.3 针对接口编程,不针对实现编程 1.1.4 为交互对象之间的松耦合设计而努力 1.1.5 类应该对扩展开放,对修改关闭 1.1.6 依赖抽象,不要依赖具体类 1.1.7 类应该只有一个改变的理由 3. 参考书目 18 设计模式学习笔记 1.1.8 《head first设计模式》 1.1.9 《重构与模式》 下面是泰戈尔励志经典语录,欢迎阅读。 不需要的朋友可以编辑删除~~ 1. 上帝对人说道:“我医治你,所以要伤害你;我爱你,所以要惩罚你。” 2. 如果错过太阳时你流了泪,那么你也要错过群星了。 3. 天空中没有翅膀的痕迹,但我已飞过。 4. 当你把所有的错误都关在门外,真理也就被拒绝了。 5. 错误经不起失败,但是真理却不怕失败。 6. 离我们最近的地方,路程却最遥远。我们最谦卑时,才最接近伟大。 7. 爱就是充实了的生命,正如盛满了酒的酒杯。 8. 月儿把她的光明遍照在天上,却留着她的黑斑给她自己。 9. 生命因为付出了爱,而更为富足。 19 设计模式学习笔记 10. 果实的事业是尊重的,花的事业是甜美的,但是让我做叶的事业罢,叶是谦逊地专心地垂着绿荫的。 11. 上帝对人说道:“我医治你,所以要伤害你;我爱你,所以要惩罚你。” 12. 如果错过太阳时你流了泪,那么你也要错过群星了。 13. 天空中没有翅膀的痕迹,但我已飞过。 14. 当你把所有的错误都关在门外,真理也就被拒绝了。 15. 错误经不起失败,但是真理却不怕失败。 16. 离我们最近的地方,路程却最遥远。我们最谦卑时,才最接近伟大。 17. 爱就是充实了的生命,正如盛满了酒的酒杯。 18. 月儿把她的光明遍照在天上,却留着她的黑斑给她自己。 19. 生命因为付出了爱,而更为富足。 20. 果实的事业是尊重的,花的事业是甜美的,但是让我做叶的事业罢,叶是谦逊地专心地垂着绿荫的。 21. 失败可以导致胜利,死亡可以导致永生。 22. 任何事物都无法抗拒吞食一切的时间。 23. 虚伪的真诚,比魔鬼更可怕。 24. 母亲不仅仅属于家庭,而且还属于世界。我尝过做母亲的痛苦,但却没有做母亲的自由。 25. 鸟翼系上黄金,这鸟便永远不能在天上翱翔 26. 真理是严酷的,我喜爱这个严酷,它永不欺骗。 27. 果实的事业是尊贵的,花的事业是甜美的;但是让我做叶的事业吧,叶是谦逊地、专心地垂着绿荫的。 20 设计模式学习笔记 28. 夜把花悄悄地开放了,却让白日去领受谢词。 29. 有时候,两个从不相识的人的确也很可能一见面就变成了知心的朋友。 30. 青春啊,难道你始终囚禁在狭小圈子里?你得撕破老年的蛊惑人心的网。 31. 全是理智的心,恰如一柄全是锋刃的刀。它叫使用它的人手上流血。 32. 要使生如夏花之绚烂,死如秋叶之静美。 33. 权力把受害者的百般苦恼看作忘恩负义 34. 真理之川从他的错误的沟渠中流过。 35. 虚伪的真诚,比魔更可怕。 36. 休息与工作的关系,正如眼睑与眼睛的关系。 37. 抽象概念作为一种见解倒是不错的,但应用到人们身上,就不那么行得通了 38. 你可以从外表的美来评论一朵花或一只蝴蝶,但你不能这样来评论一个人。 39. 世界上的一切伟大运动都与某种伟大理想有关。 40. 我们把世界看错了,反说它欺骗我们 41. 我给你爱的阳光,同时给你光辉灿烂的自由。 42. 顺境也好,逆境也好,人生就是一场对种种困难无尽无休的斗争,一场以寡敌众的战斗。 ——罗宾德拉纳特?泰戈尔 43. 真理穿了衣裳觉得事实太拘束了,在想象中,她却转动得很舒畅。 44. 如果把所有的错误都关在门外的话,真理也要被关在门外了。 45. 贞操是从丰富的爱情中生出来的资产。 46. 有些事情是不能等待的。假如你必须战斗或者在市场上取得最有利的地位,你就不能不冲锋、奔跑和大步行进。 47. 在哪里找到了朋友,我就在哪里重生。 21 设计模式学习笔记 48. 爱是亘古长明的灯塔,它定晴望着风暴却兀不为动,爱就是充实了的生命,正如盛满了酒的酒杯。 49. 那些仅仅循规蹈矩过活的人,并不是在使社会进步,只是在使社会维持下去 50. 医治罪恶的正确方法是和它进行斗争 51. 在任何情况之下,天神都不会用镣铐来束缚他所创造的人的;他使他们的生活经常发生变化,从而得到启发。 52. 只有人类精神能够蔑视一切限制,相信它的最后成功,将它的探照灯照向黑暗的远方。 53. 不要从你自己的袋里掏出勋绩借给你的朋友,这是污辱他的。 54. 埋在地下的种子产生果实,却并不要求什么报酬。 55. 情报对敌人和我们周围的世界的了 56. 在老年时,会有许多闲暇的时间,去计算那过去的日子,把我们手里永久丢失了的东西,在心里爱抚着。 57. 真理只有用它受到的阻力和反对来检验它是真是假„„真理必须通过它在各个时代受到的反对和打击被人重新发现。 58. 生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。 59. 我宁愿要那种虽然看不见但表现出内在品质的美。 60. 静止便是死亡,只有运动才能敲开永生的大门。 61. 我希望你照自己的意思去理解自己,不要小看自己,被别人的意见引入歧途。 62. 如果错过了太阳时你流了泪,那么你也要错过群星了。 63. 要是童年的日子能重新回来,那我一定不再浪费光阴,我要把每分每秒都用来读书! 64. 月儿把她的光明遍照在天上,却留着她的黑斑给它自己。 22 设计模式学习笔记 65. 人所追求的,不过是看到“新事物”以无比壮丽的姿态出现在那摧毁“旧事物”的火焰顶上罢了。 66. 我们的生命是天赋的,我们惟有献出生命,才能得到生命。 67. 如果你对一切错误关上了门,那么真理也将将你关在门外 68. 我们如海鸥与波涛相遇似地,遇见了,走近了。海鸥飞去,波涛滚滚地流开,我们也分别了。 69. 完全按照逻辑方式进行思维,就好像是一把两面都昌利刃而没有把柄的钢刀,会割伤使用者的手。 70. 祖国的伟大和力量原来就蓄存在祖国的自己身上 71. 宗派主义,使人完全忘记了人就是人这个简单明白的真理 72. 那些仅仅循规蹈矩的过活的人,并不是在使社会进步,只是在使社会得以维持下去 73. 多和朋辈交游无疑是医治心病的良方。 74. 不要从你自己的袋里掏出勋章借给你的朋友,这是侮辱他的。 75. 永恒的献身是生命的真理。它的完美就是我们生命的完美。 76. 世界上使社会变得伟大的人,正是那些有勇气在生活中尝试和解决人生新问题的人! 77. 有生命力的理想决不能象钟表一样,精确计算它的每一秒钟。 78. 总会发生些情愿与不情愿、知道与不知道、清醒与迷误的那种痛苦与幸福的事儿。但如果心里存在虔诚情感,那么在痛苦中也会得到安宁。否则,便只能在愤怒争吵、妒嫉仇恨、唠唠叨叨中讨活了。 79. 生活本身就是五花八门的矛盾集合——有自然的也有人为的,有想象的也有现实的。 80. 超越国界,比国家更伟大的东西,只能通过国家来显示自己 81. 思想以自己的言语喂养它自己,而成长起来。 23 设计模式学习笔记 82. 真理之川,从它的错误之沟渠中流过。 83. 附和真理,生命便会得到永生。 84. 蜜蜂从花中啜蜜离开时营营地道谢,浮夸的蝴蝶却是相信花是应该向他道谢的。 85. 有勇气在自己生活中尝试解决人生新问题的人,正是那些使社会臻于伟大的人!那些仅仅循规蹈矩过活的人,并不是在使社会进步,只是在使社会得以维持下去。 86. 人生虽只有几十春秋,但它决不是梦一般的幻灭,而是有着无穷可歌可颂的深长意义的;附和真理,生命便会得到永生。 87. 你若爱她,让你的爱像阳光一样包围她,并且给她自由。 88. 虚伪永远不能凭借它生长在权利中而变成真实。 89. 闪射理想之光吧,心灵之星!把光流注入,未来的暮霭之中。 90. 妥协对任何友谊都不是坚固的基础。 91. 如果你因失去了太阳而流泪,那末你也将失去群星了。 92. 要是爱情不允许彼此之间有所差异,那么为什么世界上到处都有差异呢? 93. 虚伪永远不能凭借它生长在权力中而变成真实。 94. 我们必须奉献于生命,才能获得生命。 95. 当形式是内容的本身,它和内容是 96. 全是理智的人,恰如一把全是锋刃的刀,叫使用它的人手上流血 97. 造物主把像你这样的人派遣到人世间来,是要你担负一定的责任的,所以你决不应该轻视自己的身体。 98. 人类的历史是很忍耐地等待着被侮辱者的胜利。 (印度)《飞鸟集》 99. 学习必须与实干相结合。 104. 蜜蜂从花中啜蜜,离开时营营的道谢。浮夸的蝴蝶却相信花是应该向他道谢的。 24 设计模式学习笔记 105. 刀鞘保护刀的锋利,它自己则满足于它的迟钝。 106. 知识是珍贵宝石的结晶,文化是宝石放出来的光泽。 107. 当我们是大为谦卑的时候,便是我们最近于伟大的时候。 108. 如果错过了太阳时你流了泪,那么你也要错过群星了。 109. 爱是理解的别名。 110. 眼睛不能看到你,因为你是眼睛中的瞳仁;心灵不能了解你,因为你是内心深处的秘密。 111. 世界上最遥远的距离不是生与死,而是我站在你面前,你却不知道——我爱你。 112. 生当如夏花之绚丽,死当如秋叶之静美。 113. 你微微地笑着,不同我说什么话。而我觉得,为了这个,我已等待得久了。 114. 使生如夏花之绚烂,死如秋叶之静美。 115. 让死者有那不朽的名,但让生者有那不朽的爱。 116. 我们把世界看错了,反说世界欺骗我们。 117. 你看不见你自己,你能看见的只是自己的影子 118. 生当如夏花之绚烂,死当如秋叶之静美。 119. 闪射理想之光吧/心灵之星!把光流注入/未来的暮霭之中。 120. 我们只有献出生命,才能得到生命。 121. 爱情是理解和体贴的别名。 122. 相信爱情,即使它给你带来悲哀也要相信爱情。 123. 女人,罪恶把你剥得赤裸,诅咒把你洗净,你升华成完善的生命。 124. 在消除贫困的时候,我们会拥有自己的财富,而拥有这笔财富,我们却会失去多少善心,多少美和多少力量啊! 25 设计模式学习笔记 125. 静止便是死亡,只有运动才能敲开永生的大门。 126. 老是考虑怎样去做好事的人,就没有时间去做好事。 127. 那些缠扭着家庭的人,命定要永远闭卧在无灵魂世界的僵硬的生活中。 128. 我希望你照自己的意思去理解自己,不要小看自己,被别人的意见引入歧途 129. 真理之川从他的错误的沟渠中流过。 148. 当青春的光彩渐渐消逝,永不衰老的内在个性却在一个人的脸上和眼睛上更加明显地表露出来,好像是在同一地方久住了的结果。 149. 人的青春时期一过,就会出现名象秋天一样的优美成熟时期,这时,生命的果实象熟稻子似的在美丽的平静的气氛中等待收获。 150. 知识是珍贵宝石的结晶,文化是宝石放出的光泽 151. 在你青春的无忧无虑的生涯里,你屋子里所有的门户始终洞开着。 152. 一个人的青春时期一过,就会出现像秋天一样的优美的成熟时期,这时,生命的果实像熟稻子似的在美丽的平静的气氛中等待收获。 153. 果实的事业是尊贵的,花的事业是甜美的,但是让我们做叶的事业罢,叶是谦逊地专心地垂着绿荫的 154. 天空虽不曾留下痕迹,但我已飞过 155. 当你错过太阳而流泪,你也将错过群星了 156. 世界上的一切伟大运动都与某种伟大理想有关。 157. 有生命力的理想决不能象钟表一样,精确计算它的每一秒钟。 158. 生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。 159. 界上使社会变得伟大的人,正是那些有勇气在生活中尝试和解决人生新问题的人! 160.宗教就会象财富、荣誉或家族那样,仅仅成为一种人们引以自豪的东西。 26 设计模式学习笔记 27
本文档为【设计模式学习笔记-命令模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:118KB
软件:Word
页数:0
分类:企业经营
上传时间:2018-04-05
浏览量:8