展开

关键词

Design Patterns 04 - -原则

-原则-原则, 是说软件实体(类, 模块, 函数等等)应该可以扩展, 但是不可修改.应对变化无论模块是多么的””, 都会存在一些无法对之的变化. 既然不可能完全, 设计人员必须对于他设计的模块应该对哪种变化做出选择. 他必须先猜测出最有可能发生的变化种类, 然后构造抽象来隔离那些变化. “-原则”的思想在于: 面对需求, 对程序的改动是通过增加新代码进行的, 而不是更改现有的代码.比如之前的计算器程序, 写完加法后, 又增加的减法的需求, 这个时候就需要对原有程序进行改动.

7620

-原则(OCP,Open - Closed Priciple)

-原则(OCP,Open - Closed Priciple)1 前言害羞地看完了《单一职责简述》,自然想到了另外一个重要的原则——&原则&原则是程序设计的一个重要原则,相比于著名的 SPR,这个原则可能不太容易被人们记住,但是这个原则却不容忽视经典的设计模式都是基于C++Java的OOP,相信读者都耳熟能详了本文是基于JavaScript来的,同时也会提到OCP在前端程序中的应用与表现 OCP的核心如下: Open for extension, Closed for modification 翻译过来是:对扩展,对修改需求总是变化的,面对变化,一个优秀的程序(类,组件)应该是通过扩展来适应新的变化 所以,分是很自然而然的 但是,分之后我们要怎么处理?如何设计可以很好的适应上述需求变化?答案是对抽象编程具体怎么抽象,哪里是抽象? 程序的世界一定会有变更,具体是怎么处理这些变更,怎么更好,更高效地适应变更 无论组件是多么的“”,都会存在一些无法对之的变化 既然不可能完全,设计人员必须对于他设计的模块应该对哪种变化做出选择

48590
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年38元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计模式—–原则

    本篇文章将介绍这些思想的基础:原则(Open Closed Principle)。 早在1988年Bertrand Meyer 就给出了指导建议,他创造了当下非常著名的原则。套用他的原话:软件实体(类、模块、函数等)应对扩展,但对修改。。 原则(Open Closed Principle)描述符合原则的模块都有两个主要特性:1. 它们 面向扩展(Open For Extension)。 示例:ClientServer 引用图1 展示了一个简单的且不符合原则的设计。? 在 C 语言中,使用过程化技术是无法满足原则的。我们可能会通过下面代码显示的方式来解决该问题。

    34610

    -原则(OCP,Open - Closed Priciple)

    本文作者:IMWeb 黎清龙 原文出处:IMWeb社区 未经同意,禁止转载 -原则(OCP,Open - Closed Priciple)1 前言害羞地看完了《单一职责简述》,自然想到了另外一个重要的原则 ——&原则&原则是程序设计的一个重要原则,相比于著名的SPR,这个原则可能不太容易被人们记住,但是这个原则却不容忽视经典的设计模式都是基于C++Java的OOP,相信读者都耳熟能详了本文是基于 OCP的核心如下: Open for extension, Closed for modification 翻译过来是:对扩展,对修改需求总是变化的,面对变化,一个优秀的程序(类,组件)应该是通过扩展来适应新的变化 所以,分是很自然而然的 但是,分之后我们要怎么处理?如何设计可以很好的适应上述需求变化?答案是对抽象编程具体怎么抽象,哪里是抽象? 程序的世界一定会有变更,具体是怎么处理这些变更,怎么更好,更高效地适应变更 无论组件是多么的“”,都会存在一些无法对之的变化 既然不可能完全,设计人员必须对于他设计的模块应该对哪种变化做出选择

    23810

    设计模式(六):原则

    什么是原则?定义:软件实体如类、模块、函数应该对扩展,对修改关原则的主要思想是:当系统需求发生改变时,尽量不修改系统原有代码功能,应该扩展模块的功能,来实现新的需求。 另外对测试人员也有很大的影响,由于在原有的基础上修改,测试人员还得对原有功能模块测试,测试人员不打死你才怪,且会延长项目发周期。遵守原则具有以下优点:提高代码的可复用性。 不修改原有代码有助于系统稳定性,以扩展的方式发新功能有助于快速发与维护。提高软件测试的友好性。以拓展的方式发功能,不会影响原有功能,有利于加快测试进度。为什么要遵守原则? 我们简单以商店价格变化为例子来描述为什么要遵守原则。 发过程中,之前的设计有他们设计的原因,应尽量避免对原有代码的修改。原则的实现方法1、抽象约束抽象层不易变化,只要抽象得合理,就可以保持系统架构的稳定性。

    40230

    设计模式(六):原则

    什么是原则?定义:软件实体如类、模块、函数应该对扩展,对修改关原则的主要思想是:当系统需求发生改变时,尽量不修改系统原有代码功能,应该扩展模块的功能,来实现新的需求。 另外对测试人员也有很大的影响,由于在原有的基础上修改,测试人员还得对原有功能模块测试,测试人员不打死你才怪,且会延长项目发周期。遵守原则具有以下优点:提高代码的可复用性。 不修改原有代码有助于系统稳定性,以扩展的方式发新功能有助于快速发与维护。提高软件测试的友好性。以拓展的方式发功能,不会影响原有功能,有利于加快测试进度。为什么要遵守原则? 我们简单以商店价格变化为例子来描述为什么要遵守原则。 发过程中,之前的设计有他们设计的原因,应尽量避免对原有代码的修改。原则的实现方法1、抽象约束抽象层不易变化,只要抽象得合理,就可以保持系统架构的稳定性。

    42120

    编码最佳实践——原则

    原则定义 原则有两种不同的定义,分别是20世纪80年代最原始的定义和后期一个更现代的定义,后者对前者进行更加详尽的阐述。 “对于修改是的。“ 对模块行为进行扩展时,不必改动该模块的源代码或二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或Java的.jar文件,都无需改动。 软件修复明显倾向于实用主义而不是坚持原则。客户端感知如果一个类的改动会引起另一个类的改动,那么这两个类就是紧密耦合的。 如果我们对现有代码的修改不会影响客户端代码,那么也就谈不上违背原则。对于扩展是的扩展点没有扩展点TradeProcessorClient类直接依赖TradeProcessor类。 但是,这又会违背原则。抽象方法另外一种使用实现继承的更加灵活的扩展点是抽象方法。客户端依赖抽象基类,因此提供任何一个具体子类(或者用来支持新需求的子类)给客户端都不会违背原则。

    28830

    Java线程

    把对象装到一个线程里,只有一个线程可以看到该对象,那么就算这个对象不是线程安全的,也不会出现任何线程问题,因为它只能在一个线程中被访问。Ad-hoc线程:程序控制实现,非常脆弱,最糟糕,忽略。 堆栈:简单的说就是局部变量,无并发问题。多线程访问同一个方法时,方法中的局部变量会被拷贝一份到线程栈中。 ThreadLocal线程:Java中提供一个ThreadLocal类来实现线程,这个类使线程中的某个值与保存值的对象关联起来ThreadLocalThreadLocal类提供的方法核心的五个操作 最终的变量是在当前线程的ThreadLocalMap中,并不是存在ThreadLocal上,ThreadLocal可以理解成传递关系的。 为了避免参数复杂的传递,在controller中将已经装好的参数入ThreadLocal中,在其他层调用时直接通过ThreadLocal对象获取。

    14200

    Java Concurrent 线程

    就现状而言,差不多有以下几种方式:1、Ad-hoc 线程 2、ThreadLocal 3、栈Ad-hoc 线程Ad-hoc ,靠意念。 然后就有可能实现一个完全没有问题的ad-hoc了,说的真,如果有这个能力还是干点别的吧,别了。这个种方式完全依赖于实现者的控制,但是实际发中基本不可用的一种方式。 实现原理ThreadLocal 里维持了一个map,这个map以当前线程的threadlocal为id存了关于这个线程的变量副本。

    13530

    设计模式六大原则——原则(OCP)

    原则主要体现在两个方面:      1、对扩展,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。    2、对修改,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。   怎么使用原则? 实现的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。 让类依赖于固定的抽象,所以对修改就是的;而通过面向对象的继承和多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是的。     我们分析上述设计就能发现不能把业务装在一个类里面,违反单一职责原则,而有新的需求发生,必须修改现有代码则违反了原则。     如何才能实现耦合度和灵活性兼得呢?     那就是抽象,将业务功能抽象为接口,当业务员依赖于固定的抽象时,对修改就是的,而通过继承和多态继承,从抽象体中扩展出新的实现,就是对扩展的

    60930

    大话设计模式--第四章 原则

    --原则:一、概念-原则, 指的是软件实体(类, 模块, 函数等等)应该可以扩展, 但是不可修改。这个原则其实有两个特征, 对于扩展是的, 对于更改是的. 答案是: -原则。第一点:尽可能的将类设计的足够好 --原则意思是说: 你设计的时候, 时刻要考虑, 尽量让这个类足够好。 第二点: 提前预测变化点, 对变化点进行抽象隔离 然而, 绝对的对修改关时不可能的。无论模块是多么的,都会存在一些无法对之的变化。 既然不可能完全,设计人员必须对于他设计的模块应该对哪些变化做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。 应对变化的时间点:我们要尽可能在发工作展不久就知道可能发生的变化,查明可能发生的变化所等待的时间越长, 要创建正确的抽象就越困难。发-原则是面向对象设计的核心所在。

    19020

    ,资金压力正在侵蚀OpenAI

    Karen 发现 OpenAI似乎弃了其先前的性和透明性承诺;换句话说,竞争的压力正在侵蚀“理想主义”。 1、从,矛盾正在侵蚀OpenAI上次OpenAI让大众眼前一亮研究还是它在2019年发布的最强“通用”NLP模型GPT-2,从那之后,也就是其转型为“有限盈利”企业这将近一年的时间,这种能够带来突破性的研究的 在那之后,OpenAI的高层重新建立了薪酬结构,根据任务承担来发薪资。OpenAI为其员工设计了激烈竞争与不断增加的压力。这种方式,确实给它带来了更多的资金,但也破坏了其最初、透明、协作的精神。 谁会希望,在未来AGI是由像Google、亚马逊、Facebook、苹果或阿里巴巴这样的企业发出来,而非OpenAI这样的非营利性组织呢?但弃控制才是理想的源的逻辑本质。 针对这个问题,马斯克也非常关心,其在twitter上表示:OpenAI应该更多的。但是坚持初衷,完全对于一家只是实验室的OpenAI来说是最好的选择么?

    16710

    Android,源还是

    而ASL许可证规定,可以随意使用源码,不必源,所以建筑在Android之上的硬件驱动和应用程序,都可以保持。 实际上,它创造出了一个kernel的分支,大量的发者都依赖那个分支。 这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个的系统。 如果Android继续这样下去,那么源社区为什么要为它免费制作软件呢?因为我又不是在为源社区服务,而是在为Google服务。 有人指出: Google自己的网站,与微软的网站一样。它源出来的东西,都是根据GPL许可证不得不源的。 好吧,姑且不谈Google本身,因为它至少不要求外界提供支持。 但是Android不一样,你不能假装成源系统,骗取社区的支持,然后又干着系统的勾当。以你的实力,不用Linux Kernel,自己发一个Google Kernel,想必也不是难事。

    42270

    高质量编程的金玉良言——原则

    什么是“”原则?软件的类、模块、函数等交付后,如果需要增加功能,不要去修改原来的代码,而是通过新增加类的方法去扩展功能。 所谓的“”就是指接口,也就是通过增加子类的方法来增加功能;“”指的是修改,也就是代码一旦提交,就不要再去修改它。 总而言之,“”原则的意思就是:在我们设计一个类的时候要尽量把这个类的功能考虑全面,然后一旦写好了交付给第三方使用之后就不要再去修改。 但是,在实际发中,“”是相对的,一个类写完后并不能确保它未来永远都不会被修改。 折扣的形式有多种多样,而现在我们的折扣类中只提供了“满100返50”的打折方式,如果要增加其他打折方式就要往折扣类里面增加新的打折方式,如果过了一阵子又要增加打折方式,就又要在折扣类里面增加代码,这就违背了“修改

    487120

    java并发之线程(二)

    避免并发最简单的方法就是线程。什么是线程呢?就是把对象装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。实现线程有哪些方法呢? 1:ad-hoc线程 这是完全靠实现者控制的线程,他的线程完全靠实现者实现。也是最糟糕的一种线程。所以我们直接把他忽略掉吧。2:栈是我们编程当中遇到的最多的线程。 3:ThreadLocal      使用ThreadLocal是实现线程的最好方法,有兴趣的朋友可以研究一下ThreadLocal的源码,其实ThreadLocal内部维护了一个Map,Map 的key是每个线程的名称,而Map的值就是我们要的对象。 总之,当我们要用线程来避免并发问题的时候,最好使用的就是 【栈】 和 【ThreadLocal】。

    7910

    面象对象设计6大原则之二:原则

    原则(OCP),The Open Closed Principle定义一个软件的实体,包括类、方法、模块、应该对扩展,对修改关原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功能出现BUG,带来不必要的麻烦,所以原则正是引导我们去设计一个稳定 在实际应用中我们一般会有以下几种做法保证原则:1、抽象出一个接口或者抽象类,定义公共的方法,达到扩展的目的。2、参数类型和引用类型使用接口或者抽象类,不能依赖实现类。 这些应用看起来也并不复杂,无非是合理地定义接口和抽象类,不同的业务功能采用不同的实现类达到扩展,像设计模式中的策略模式、模板方式模式等都是的原则。 总结一下,原则具有以下几个优点:1、方便扩展,提高了可维护性。2、不影响已有功能,提高了系统稳定性和减少了重复测试。3、扩展之前的逻辑,提高了代码复用性。

    34060

    Java并发编程之线程

    什么是线程?当访问共享变量时,往往需要加锁来保证数据同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程中访问数据,就不需要同步了。这种技术称为线程。 在Java语言中,提供了一些类库和机制来维护线程的性,例如局部变量和ThreadLocal类。实现线程的方法有哪些呢? 1、Ad-hoc线程Ad-hoc线程是指,维护线程性的职责完全有程序实现来承担。例如可见性修饰符或局部变量,能将对象到目标线程上。事实上对于线程对象通常保存在共有变量中。 Ad-hoc线程是非常脆弱的,所以程序中尽量少使用它,可以使用以下两种技术(栈,ThreadLocal)。 2、栈也被成为线程内部使用或者线程局部使用,不要与ThredaLocal混淆,比Ad-hoc更易于维护,也更加健壮。在栈中,只能通过局部变量才能访问对象。

    23920

    JAVA高逼格面试:线程

    java的并发编程里,就有一个比较晦涩的名词,叫做线程。在以往的技术交流中,经常有人提到这个东西。那它到底是何方神圣,又有什么用的功效呢?你去搜索一下网络上的文章,都会给你三个选项。 1)Ad-hoc线程。2)栈。3)ThreadLocal类。这些知识,戳破了那层窗户纸,内容其实并不复杂。可怕的是这些名词,为了记住它们真是蛋碎了一地。意义? 由于它们的祖先,最终只会指向一个线程,所以它们的作用范围就被了。?如上图所示,局部变量和某个线程的关系。java中还有个线程执行的内存模型JMM,不过那是对变量的复制和同步,说的不是一回事。 ThreadLocal其实,java提供给发者唯一的线程API,就是ThreadLocal。Thread类中,有一个成员变量threadLocals,存了与本线程相关的所有自定义信息。 其中一种是JVM内部实现的,原理方面的知识;Ad-hoc是告诉用户这种线程式很困难的,赶紧弃;到最后,我们的手里就只剩下了ThreadLocal了。

    26610

    JAVA线程之ThreadLocal与栈(六)

    (一)线程概念① 引言多线程访问共享可变数据,共享变量,涉及到线程间数据同步的问题。一般很多不会去用到共享数据,所以提出了线程的概念。 ② 定义数据都被在各自的线程之中,就不需要同步,也不用考虑线程的安全,这种通过数据在线程中而避免使用同步的技术被称为线程。 ⑤ 源码** 线程示例 *public class Demo7 { ** threadLocal变量,每个线程都有一个副本,互不干扰 * public static ThreadLocal value (二)栈就是使用局部变量,局部变量的固有属性之一就是在线程中。他们位于执行线程的栈中,其他线程无法访问这个栈。 PS:这次说了线程的概念,其实很容易理解只要知道在ThreadLocal是JVM内部维护了一个Map就可以了。栈没有纤细概述,跟局部变量是一个概念。

    40030

    《你必须知道的.net》读书笔记 007——2.3 原则

    原则,核心思想:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是的,而对修改是的。      体现在两个方面:      1、对扩展,意味着有新的需求和变化时,可以对现有代码进行扩展,以适应新的情况。       2、对修改,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。 举分页控件的例子吧,一始分页方式是采用PostBack,但是在网页里面使用的时候,发现对于SEO是不友好的,用户体验也不好,后退的时候容易发生错误。那么怎么办呢?加一个URL分页的方式吧。 打分页控件的源代码一看,自己都晕了,基本上是看不懂了。怎么办呢?单独写一个吧。以前确实是这么处理两种分页方式的。

    25070

    相关产品

    • 腾讯觅影开放实验平台

      腾讯觅影开放实验平台

      一站式医学人工智能开放创新服务平台,涵盖数据管理、标注,算法训练、评测、应用全流程

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券