https://github.com/human-centered-ai-lab/dat-kandinsky-patterns 抽象 康定斯基图形和康定斯基模式是数学上可描述的、简单的、独立的、因此可控的合成测试数据集
其实答案是 500,语句”innerFunction()”,正是使用了 Function Invocation Patterns 这种方式去调用一个方法,这个方法调用没有显式指定 “this”,那么如果你按照一些其它编程语言的思路去思考的话 obj()(); ————————————————– 思考——————————————————– 结果应该是 1(其实这道题只是一个简单的闭包使用而已,并没有 Function Invocation Patterns 最后一题,把典型的闭包和 Function Invocation Patterns 结合起来,你要毫无压力地挺住啊: var value = 500; var obj = function(){
You may have heard mocking is evil. Just like anything in software development it can be used evil, just like DRY(Don’t Repeat Yourself).
外观模式, 为子系统中的一组接口提供一个一致的界面, 此模式定义了一个高层接口, 这个接口使得这一子系统更加容易使用.
TDD Process Write a failing test and see it fail so we know we have written a relevant test for our requirements and seen that it produces an easy to understand description of the failure. Writing the smallest amount of code to make it pass so we know we
动态的给一个对象添加一些额外的职责, 就增加功能来说, 装饰模式比生成子类更为灵活.
设计模式(Design Patterns) ——可复用面向对象软件的基础一般会用到的: Factory( 工厂模式) Singleton(单例模式) 这两个比较多 Proxy(代理模式) Adapter 23种通熟解释和简明教程: http://blog.csdn.net/langb2014/article/details/49616613 权威文档《图说设计模式》:http://design-patterns.readthedocs.io
现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。
代理模式 为其他对象提供一种代理来控制对这个对象的访问. abstract class Subject { public abstract void Request(); } class RealSubject : Subject { public override void Request() { // todo } } class Proxy : Subject { RealSubject realSubject; public overrid
组合模式, 将对象组合成树形结构以表示”部分-整体”的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性.
原文链接:https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54
在许多设计中,经常会出现一个对象直接请求另一个对象调用其方法以达到某种目的的行为,这里的两个类之间就会出现紧耦合。这很不好,所以我们应该将 方法的请求者 和 方法的实现者 分开。
These patterns gonna help you build an app that’s smooth, responsive, and uses as little battery as Patterns to avoid bad performance Avoid blocking main Thread Avoid unnecessary invalidations that may Consider Package Instead of Private Access with Private Inner Classes Use Native Methods Carefully Patterns to invalidate() Consider creating your own ViewGroup RecyclerView (replaces ListView and GridView) Patterns Only the keys are WeakReference Patterns for CPU Do not nest multi-pass layouts Lazily compute complex
状态模式, 当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了其类.
命名模式, 将一个请求封装为一个对象, 从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志, 以及支持可撤销的操作.
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。
开放-封闭原则, 是说软件实体(类, 模块, 函数等等)应该可以扩展, 但是不可修改.
对象的继承关系是在编译时就定义好了, 所以无法在运行时改变从父类继承的实现, 子类的实现与他的父类有非常紧密的依赖关系, 以至于父类实现中的任何变化必然会导致子类发生变化. 当你需要复用子类时, 如果继承下来的实现不适合解决新的问题, 则父类必须重写或被其他更适合的类替换. 这种依赖关系限制了灵活性并最终限制了服用性.
在享元对象内部并且不会随环境变化而改变的共享部分, 可以称为是享元对象的内部状态, 而随环境改变的改变的, 不可以共享的状态就是外部状态了. 享元模式可以避免大量非常相似类的开销. 在程序设计中, 有时需要生成大量细粒度的类实例来表示数据. 如果能发现这些实例除了几个参数外基本上都是相同的, 有时就能够大幅度的减少需要实例化的类的数量. 如果能把那些参数移到类实例的外面, 在方法调用时将他们传递进来, 就可以通过共享大幅度的减少单例的数目.
面向对象的编程, 并不是类越多越好, 类的划分是为了封装, 但分类的基础是抽象, 具有相同属性和功能的对象的抽象集合才是类.