差点漏掉一个垃圾 -- 设计模式

宏哥 发布于 2012/06/27 14:15
阅读 952
收藏 2

这玩意完全无用. 真不知道 Singleton 和 全局变量有什么区别?

工厂模式,和简单的分支处理也没有区别.

非得搞出10000个类, 1000个继承,打印一个hello world才能体现水平吗?

设计模式也是典型的闭门造车的玩意!

软件的分析,设计, 一定是按照行业, 功能, 业务来隔离,集成的. 设计模式完全毫无用处.

年轻的时候,唯一令人遗憾的事情,就是花太多时间在很多垃圾上面.

以下是话题补充:

@宏哥:有没有人真正见过,在 操作系统,数据库,或者产品化的软件,看到过这些模式的应用? (2012/06/27 14:31)
@宏哥:最令人欣慰的是,不断有炮灰投入到这些垃圾当中,为软件行业消灭对手,扫清障碍做贡献. (2012/06/27 14:33)
加载中
1
逝水fox
逝水fox
宏哥 我那话也不是说模式就垃圾了。只是说这东西就像是课本里面的范例一样,目的是让人看了之后自己能学会解决问题和思考的方向。写东西的根本目标只是解决问题让遇到的事情简单化,仅仅是知道模式,硬套在自己遇到问题上,只会适得其反。说完全无用感觉太绝对了。
1
宏哥
宏哥

引用来自“godlike”的答案

引用来自“宏哥”的答案

引用来自“godlike”的答案

我觉得很多模式都很常见,比如在spring中就使用过singleton,proxy,factory等等,有些模式是语言限制导致不得不用,另一些则可以达到解藕、增加可扩展及维护性的目的。

比如最近发现NULL模式也相当的有用,可以减少不必要的null判断。

你会发现,不用设计模式,更简洁.

spring实现的MVC, 如果用php 来表达,就是一个针对 URL的 正则表达式, 加上一个 几百行实现的PHP 模板,实际上PHP本来就是模板. 可以认为 整个MVC就是一个正则表达.

spring 的尺寸差不多是100倍.

这就就是追求设计的目的?

PHP我是没用过,但我看过一些PHP代码,拿它与spring比的话,犹如渔船比军舰,不在一个级别上。如果你硬要拿来比较话,最多也只能与spring mvc比比。就我知道的来看,php也就是在网页前端显示时用下,后台基本还是用java来支撑。当然拿网页显示这些基本操作来比的话,java确实不如php,网页开发并不是java的长处,java主要是用来做后台业务开发、企业应用开发,在这方面php只能望洋兴叹。而像php这些搞网页开发的,基本就是js+css显示问题,这个当然与设计模式扯不上什么关系。

这里不是要比较 PHP 和spring. 

我的意思是, 设计模式搞出一大坨 类来, 实现的东西,其实都是非常简单的逻辑.

这种东西,就是典型的 10000个类,1000个继承,里面还有几十个模式.打印一个'hello world', 然后夸夸奇谈什么设计模式.

实际上,用C语言,就是printf("hello world!\n")

这些东西,真是太扯淡了.

1
宏哥
宏哥

引用来自“godlike”的答案

@宏哥  ,那我们就来举点实在的例子,那最简单的NULL模式来说(不在23模式内),大意是:某类的API需要返回一个list,如果返回的list为null,那么就返回Collections.EMPTY_LIST(空的list),这样前端调用时就不再需要判断是否为null。如果这样的调用次数很多,就可以降低程序的一些复杂性。这种模式可以适用任何带有null对象的语言。

至于您提的“ 用 scope 和 ACL两个维度对数据进行控制”无缘得见,但站在常人观点来看,权限控制犹如明星与经济人,因此我认为存在经济人这么一个角色是恰当的,至于有没有其它方式,我想你也得用一个类似经济人的角色来对明星进行管理吧?那样的话,你还是得使用类似代理的方式来解决问题。

    其中一个子树集合.

        public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid', $orderCol='id', $maxDepth=0,$level = 0,$delimiter = ';',$db='default'){
                $_funcParas = array();
                $_funcParas[] = self::quote($tableName,$db); //Table|View
                $_funcParas[] = self::quote($idCol,$db); //ID column
                $_funcParas[] = self::quote($pidCol,$db); //Parent ID Column
                $_funcParas[] = self::quote($orderCol,$db); //Default Order by ASC
                $_funcParas[] = self::quote($startWith,$db); //Begin NODE
                $_funcParas[] = self::quote($maxDepth,$db); //Begin Depth of traverse
                $_funcParas[] = self::quote($delimiter,$db); //Delimitor,default ';'

                $_sql = 'select * from connectby('
                        .implode(',',$_funcParas).')'
                        .' as t(id int, pid int, level int, branch text, pos int)';
                if($level > 0){
                        $_sql .= ' where level >='.self::quote($level);
                }

                if($returnSql) return $_sql;
                $_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();
                if($_res){
                        return $_res;
                }else{
                        return false;
                }
        }
mark35
mark35
回复 @宏哥 : 多谢,已收藏
宏哥
宏哥
@mark35 ,就是用这个方法产生那个sql.
0
中山野鬼
中山野鬼

哈。我做个补充。。。打印个hello world实际电脑是处理了很多事情才实现的。但至少这些事情,至少从OS角度来看,是必须的。这和GUI下,折腾一堆动作,来打印个HELLO的讨论不同。

在GUI下,有些开发,打印个hello world,确实绕来绕去。折腾很多乱七八糟的东西。利用别人的类做开发没有错,但要有个前提,这个类能准确的完成你切割后的模块,而不是他10%的功能只能完成你10%的目标,随后你需要超过10倍的代码或模块,去堆叠你想要处理的事情。

0
Monkey
Monkey
工厂模式更别不是设计模式,我擦。设计模式就是面对抽象进行编程。
0
子木007
子木007

-------------------------

简单工厂、抽象工厂、简单抽象工厂   要弄死我啊

0
宏哥
宏哥

引用来自“中山野鬼”的答案

哈。我做个补充。。。打印个hello world实际电脑是处理了很多事情才实现的。但至少这些事情,至少从OS角度来看,是必须的。这和GUI下,折腾一堆动作,来打印个HELLO的讨论不同。

在GUI下,有些开发,打印个hello world,确实绕来绕去。折腾很多乱七八糟的东西。利用别人的类做开发没有错,但要有个前提,这个类能准确的完成你切割后的模块,而不是他10%的功能只能完成你10%的目标,随后你需要超过10倍的代码或模块,去堆叠你想要处理的事情。

Hello word! 背后一大堆事情, 根本不见 设计模式的踪影啊
0
宏哥
宏哥

引用来自“逝水fox”的答案

宏哥 我那话也不是说模式就垃圾了。只是说这东西就像是课本里面的范例一样,目的是让人看了之后自己能学会解决问题和思考的方向。写东西的根本目标只是解决问题让遇到的事情简单化,仅仅是知道模式,硬套在自己遇到问题上,只会适得其反。说完全无用感觉太绝对了。
Think twice!
0
D
D-dragon
Singleton 和 全局变量有什么区别?

这个东西还是有区别的,比如spring的bean一般只初始化一次。singleton在接口交互时比较有用的,如果你自己开发的类在应用使用时必须保证只能创建一个实例(全局变量不能保证),你就只能使用类似singleton的作法,因为你的API其它客户端程序员会使用。当然,这样也会有比较小的性能提升,如Calendar.getInstance()之类的。

工厂模式虽然与分支处理类似,但主要作用是解藕与扩展,如果分支本身比较简单的话,不会有什么用,如果复杂一点则相当的有用。

0
宏哥
宏哥

引用来自“godlike”的答案

Singleton 和 全局变量有什么区别?

这个东西还是有区别的,比如spring的bean一般只初始化一次。singleton在接口交互时比较有用的,如果你自己开发的类在应用使用时必须保证只能创建一个实例(全局变量不能保证),你就只能使用类似singleton的作法,因为你的API其它客户端程序员会使用。当然,这样也会有比较小的性能提升,如Calendar.getInstance()之类的。

工厂模式虽然与分支处理类似,但主要作用是解藕与扩展,如果分支本身比较简单的话,不会有什么用,如果复杂一点则相当的有用。

不一一讨论,就说这个singleton .

java里面只需要申明 static就可以了.

 

返回顶部
顶部