
OOD与设计模式
文章平均质量分 79
从面向对象的设计原则和源代码的重构实践出发,以Java为描述语言,推导/演绎常用的设计模式,以揭示设计模式之间的内在联系。通过系统性地研究设计模式,以期解决设计模式知易行难的问题。
yqj2065
《编程导论(Java)》作者
展开
-
命令式编程范式简介
命令编程范式的核心观念和观念范式:以机器的运作方式看待一切。原创 2016-10-16 23:35:59 · 1617 阅读 · 0 评论 -
[SICP] 什么是数据抽象
数据抽象(Data abstraction)是指将数据类型的抽象特征与其实现的具体细节清晰地分离。数据抽象是Parnas原则/接口与实现分离原则在类型层面(以及对象技术中)的推广,数据抽象的手段是自定义出数据类型并完成封装。——0.1.3数据抽象原创 2015-07-18 17:12:11 · 2064 阅读 · 0 评论 -
漫谈顺序、分支和循环
顺序(sequencing),分支/选择(alternation)和循环(iteration)这三种流程结构就足以表达所有程序的本质。三种流程结构如同万花筒中的彩纸,构成无穷无尽极富变化的程序。原创 2021-03-03 20:25:45 · 2967 阅读 · 2 评论 -
编程范式[paradigm]
编程范式也许是学习任何一门编程语言时要理解的最重要的术语。原创 2005-02-28 23:57:00 · 6101 阅读 · 0 评论 -
OOD教学(Java8)-导航
通过若干典型的实验例子,引入并介绍面向对象设计的基本原理和设计模式。通过解决问题而“获得”设计模式,以掌握设计模式的本质、揭示设计模式之间的内在联系;以期解决学习设计模式的知易行难困境。原创 2013-02-19 21:37:49 · 15158 阅读 · 2 评论 -
Java8:Stream概念
参考:Java 8 Stream Tutorial什么是流、管道/Pipelinin、惰性/ laziness、部分地构造、流的一次性原创 2016-06-16 13:17:52 · 2966 阅读 · 0 评论 -
1.3.3 什么是好莱坞法则
好莱坞法则:请上层模块(不限于你),不要轮询/骚扰我,我通知你。原创 2016-06-25 12:42:29 · 3187 阅读 · 1 评论 -
定义Java的三元函数
java.util.function包Function家族很庞大,共25个函数接口。但是Java 库只提供单个参数和两个参数的函数映射接口。如果需要更多参数,如三元函数,可以自己编写,还可以采用柯里化技术先获得BiFunction对象。package chap2.closure.currying;import java.util.function.BiFunction;/** * 三...原创 2019-11-18 20:28:28 · 2047 阅读 · 0 评论 -
什么是依赖注入——板砖拍Martin Fowler
今天yqj2065用板砖,拍一下Martin Fowler的《IoC容器和依赖注入模式》(Inversion of Control Containers and the Dependency Injection pattern[1] )。将我在其他博客中关于他这篇文章的吐槽,条理化。原创 2018-08-11 11:55:09 · 2015 阅读 · 2 评论 -
2017-2018-2 OOD试卷AB
一、 编程论述题:框架设计者1. 以SortTest和IntSort为例,说明什么是控制反转IoC(7分)2.什么是抽象依赖原则,它与应用程序、框架的关系(5分)3. 有一个接口如下 package util;@FunctionalInterface public interface DoubleOP { double op(double m,double n) ;}编写应用程序App...原创 2018-06-26 20:00:17 · 2146 阅读 · 2 评论 -
《OOD实战(Java8)》难产中
虽然yqj2065自认为不是一个很负责的老师,但是比起绝大多数老师,我算得上对得起我的学生。我讲课的内容,全世界独一无二。你们不会在任何其他人那里获得,除了我的博客中,零零散散。我也准备了大量例程、文字...但是将它们搞成一本书,还差得远。但是,我有更有趣的事情要做,身体也不宜久坐,写书挺无趣。最最重要的是,我对待出书,有洁癖般的要求。那就是当我死的时候,它应该有资格陪我进火葬场。我也不想写什么论...原创 2018-06-24 22:39:07 · 1020 阅读 · 0 评论 -
我是OO砖家
yqj2065是OO砖家.作为OO砖家,我都不屑拍国内的设计模式书籍的作者,都是垃圾书,有什么好拍的。要拍的是GoF、Robert C. Martin、Martin Fowler这些装逼的货。 并且,要求学生一起拍。拍得不好,我挂你!...原创 2018-06-10 21:40:34 · 1048 阅读 · 0 评论 -
同学们写学习笔记——认识IoC、DI和DIP
不懂IoC、依赖抽象原则、框架的人在说文解字。原创 2018-05-25 14:13:46 · 2254 阅读 · 2 评论 -
考前提示
考试前请学生们注意:1.本课程开卷,不限制你带任何书籍和资料。我不知道教务处有没有限制你们不得使用手机,但是我不建议你们用手机,因为你肯定不懂才到处查资料,而你查到的网上的资料,大多数我会认为是错误的。2.不得大篇幅抄袭我的博客中的内容。你不会的,抄唐诗宋词比较好。抄我的,驴头不对马嘴,会让我心烦。3.考试前,我不会整合博客内容。和考试关联度高的博客,我可能会暂时隐藏。4.看...原创 2018-01-14 23:42:23 · 1730 阅读 · 1 评论 -
动态类型+面向对象 = shit
动态类型+面向对象 = shit1.动态类型动态类型语言,属于看起来方便,用后麻烦的东西,我不喜欢它们。除非不需要考虑软件工程场合——如作为脚本语言。动态类型+高阶函数,使得Scheme定义的op非常强大,如同酒驾的司机,非常狂野。(define (op a b how-op)( how-op a b) )op可以对两个参数a,b进行“某种”how-op操作...原创 2017-12-26 18:30:54 · 813 阅读 · 0 评论 -
《Head First 设计模式·4工厂模式》评价
近期整合静态工厂、工厂方法和抽象工厂模式。因为我很厌恶DIP,所以仔细看了一下《Head First 设计模式·4工厂模式》。一个字评价烂,两个字,超级烂。这本书的行文风格,各有喜好,我不评价——虽然我不喜欢花里胡哨的插图等。我们看其内容。不应该用new,这节没有问题。《识别变化的方面》给出一个很烂的例子。PizzaStore与Pizza。抽象类Pizza有一系列子类型如CheeseP...原创 2017-07-09 23:23:32 · 864 阅读 · 0 评论 -
打包后的工具类 God+BlueJ+ClassLoader
工具类 God为什么NetBeans环境可以但是BlueJ中不行?原创 2017-07-06 22:15:47 · 1468 阅读 · 1 评论 -
4.1.3 模板方法模式(5.10)
【2019.7.1】看一本关于设计模式的书,首先翻阅其模板方法模式。一方面,模板方法模式极为基础,也包含很多设计思考;另一方面,它反映作者对设计模式的理解程度,这一章写得不好,一定是水货师傅。我们通过设计累积函数,引入策略模式的扩展、模板方法模式(5.10)。-------------------------------------------第4章 多重策略4.1.3 模板方...原创 2017-06-17 16:42:29 · 1083 阅读 · 0 评论 -
IT界,不需要“下一个伟大的思想”
近期写《抛弃依赖倒置原则》,yqj2065不知道国内外有没有吃相似观点的,因为没有找到。突然间,我惊奇:如此稀烂地DIP,为什么没有人质疑呢?联想ERP.CRM...云计算、大数据...是不是IT咨询界也在复制管理界的《下一个伟大的思想》?这是令人毛骨悚然的猜测。如果理工科也流行文科的套路,软件工程专家们像卖减肥药一样吆喝,那真是悲剧。IT界,不需要“下一个伟大的思想”原创 2017-06-10 23:34:43 · 774 阅读 · 3 评论 -
凡事都有例外-父类型依赖子类型
抛弃依赖倒置原则中,yqj2065对“抽象不应该依赖细节。细节应该依赖抽象”,描写成“一个毫无价值的废话,都能够包装成令很多人脑洞大开的原则”。但是,凡事都有例外。虽然极其罕见,有时候父类型需要事先知道其子类型。这是一种什么样的感觉呢?原创 2017-05-26 13:06:16 · 848 阅读 · 0 评论 -
恼人的Java路径
Java路径问题,超级烦人。原创 2017-05-12 18:14:50 · 762 阅读 · 0 评论 -
Java 表达式如何转化成字符串输出?
复合函数z = g(f(x)),例如f(x) = x+1g(x) = x*x计算其结果后,我想输出: g(x) = x*x,f(x) = x+1,g(f(2)) =9怎么搞?难道要将 “x*x”首先就作为字符串,编写解释器?原创 2017-05-01 21:47:41 · 1261 阅读 · 0 评论 -
吐槽大全 -GoF《设计模式》
对GoF《设计模式》等面向对象设计的经典书籍的吐槽。分散在各文章中的吐槽将被删除。原创 2017-05-01 17:39:46 · 1434 阅读 · 0 评论 -
实验5:复合函数
实验5:定义任意的复合函数。理解:一个策略选择融为另外一个策略选择的一部分。桥接和装饰模式。原创 2016-12-18 07:10:24 · 5711 阅读 · 4 评论 -
模式间的关联
GoF给出的模式间的关联图,真心感觉乱糟糟的。原创 2016-12-04 17:34:21 · 477 阅读 · 0 评论 -
桥接模式和嵌套lambda表达式
嵌套lambda表达式 :x->y->x+y上课时,我们在策略模式的基础上,介绍了其推广模板方法模式与桥接模式。n次策略模式2次行为参数化(可变部分)是独立的,则模板方法模式 2次行为参数化(可变部分)是串接的,则桥接模式。参考传统桥接模式【注,链接文章没有抓住桥接模式的本质——在策略中提供策略,而是从避免类型爆炸出发。yqj2065不想修改它了】1.桥...原创 2016-11-26 16:23:32 · 1625 阅读 · 0 评论 -
1.1.4Java 匿名类和λ表达式
lambda表达式是(函数接口的)匿名类的语法糖。Java的λ表达式并不是没有名字而是省略了名字。原创 2016-06-07 03:24:55 · 2143 阅读 · 0 评论 -
享元模式 Java
假设,需要创建十万个A对象,那么A的成员变量中,有没有一成不变的某些数据的组合呢?如果能够将这些数据组合加以类型化——称为轻量级或鸿毛/羽毛/Flyweight对象,那么十万个A对象可以共享Flyweight对象,从而有效地降低内存开销。原创 2016-06-06 00:35:33 · 772 阅读 · 0 评论 -
什么是控制反转(Inversion of Control)
控制反转/Ioc = = 数清楚回调接口soooooort()中o的个数。除此之外,IoC没有任何其他含义。在阅读[1.2.4抛弃DIP]、[1.3.3什么是好莱坞法则]、[2.2模板方法模式]和[3.2.3什么是依赖注入]时,回头看看本节。原创 2016-06-05 16:39:36 · 13581 阅读 · 8 评论 -
再谈备忘录模式 (memento pattern) Java
GoF的备忘录模式 ,对于Java语言的实现,并非令人喜欢——C++的味道太浓。在简单的例子中,Caretaker=Test或Client。4.5备忘录模式(5.6) 给出了一个简明的实现:Originator提供设置还原点方法setRestorePoint()和回滚方法undo(),外界如Test仅仅依赖于原始对象Originator,而Memento和Warehouse(原文类名为原创 2015-10-25 20:36:04 · 707 阅读 · 0 评论 -
Command(命令模式)
整合相关文字:3.4 命令模式(5.2) 命令模式之2 Invoker Vs. Client 模拟双分派 命令模式(5.2)的结构推导 参考:最简单的Java框架-java.util.function.* 最简单的Java框架脑图:其他待续:《设计模式》中,给命令模式(Command Pattern)的定义/意图比较繁琐。“对请求排队或者原创 2015-10-23 21:05:44 · 719 阅读 · 0 评论 -
增强tool.God
tool.God + Java Annotation标注原创 2015-10-22 05:59:20 · 1067 阅读 · 0 评论 -
通用函数接口java.util.function.*[
【2.1.4 通用函数接口java.util.function.* 返回目录】为了配合λ表达式的使用,定义了一些作为形参的函数接口。java.util.function包基本覆盖了程序员对函数接口的各种需求。1.方法的类型签名函数的类型签名,描述方法的形参列表类型通过本方法处理后,形成返回值类型。以如下格式描述:(形参列表类型) ->返回值类型从方法的类型签名...原创 2015-10-20 16:13:13 · 9051 阅读 · 0 评论 -
《Head First 设计模式(中文版)》书评
不知道其他人的感受,我看到它的第一眼:这是给幼儿园的小朋友看的书吗?但是却这么厚。插图多的好处,就是看得快。对于yqj2065而言,这种GoF的批注版的书,用处不大。对于Java程序员又属于初学设计模式的同学,可以看一下。GoF你必须买一本,这本书到图书馆借阅一下。另外,这本书太老了。原创 2015-10-19 22:03:42 · 948 阅读 · 0 评论 -
静态工厂的enum实现
在介绍了工厂方法模式之后,介绍这一博客内容。参数化工厂/静态工厂中的分支语句,不遵循OCP,因此例程3-7显得难看(但是简洁。俗话说得好,一个简洁三个爱。)。而工厂方法模式又不愿意作为Client→IServer的使能工具。可以采用工厂方法模式对静态工厂加以改进。package chap3.init;import commons.*; //IServer类层次public class...原创 2015-10-19 18:17:25 · 1456 阅读 · 0 评论 -
访问者模式与双分派
Java中模拟双分派 作为命令模式的应用,得到了一个有用的结构。从该结构出发唾手可得访问者模式。再次说明,yqj2065不关心访问者模式的“对象结构”。双分派中的结构,如图所示。如果一个类OverloadUnit定义了foo(Z1)、 foo(Z2)方法,Z作为命令角色定义handleFoo()帮助它完成双分派。当我们想看见a.foo(b)这一完整的双分派演示,原先的Overload原创 2015-09-25 16:35:13 · 1256 阅读 · 0 评论 -
命令模式(5.2)的结构推导
★函数接口Command是一个一统江湖式的、关注一个操作的适配器模式的目标角色,完成消息发出者与执行者(Invoker/ Receiver)的解耦。原创 2015-09-24 14:45:23 · 859 阅读 · 0 评论 -
访问者模式(5.11)之对象结构
为什么[GoF]在定义访问者模式时,要强调对象结构呢?其定义为:“表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。”作为一个设计方案或设计结构,访问者模式这种结构可以用于两种场景:①解决表达式问题;②处理整体和部分结构的操作。在场景①中,访问者表示的,是类层次如Person的一个操作,Visitor的新子类可以在不改变Person类原创 2015-09-22 13:04:09 · 1108 阅读 · 0 评论 -
3.2 依赖注入容器
spring-framework-4.2.1原创 2015-09-19 00:45:19 · 1099 阅读 · 0 评论 -
1.1.2 针对接口编程/抽象依赖原则(脑图)
脑图原创 2015-09-18 13:21:39 · 1810 阅读 · 0 评论