c# 设计模式的优缺点

问题描述

大家好的我想知道设计模式的优缺点

解决方案

解决方案二:
请大家多多帮忙
解决方案三:
看那本《设计模式之禅》吧。
解决方案四:
设计模式用于弥补编程语言语法的不足,在低级编程语言上实现高级的设计意图。所以设计模式对于C++很有用,对于Java有些用,但是对于C#来说,就纯属多此一举了。
解决方案五:
3楼的回复有点欠缺,设计模式对C#的开发也是有作用的。在开发c#应用软件的时候,设计模式用处不大,但是在开发WEB网络编程的时候,设计模式的作用就有了,如果你不知道,或者不会使用设计模式,那么你开发的网站将会很垃圾
解决方案六:
本帖最后由 caozhy 于 2014-05-21 11:38:56 编辑
解决方案七:
本帖最后由 caozhy 于 2014-05-21 11:35:34 编辑
解决方案八:
个人是支持版主的观点的,比如公司一些老程序员从其他语言转到C#,常常用设计模式来跟新人说教,最后自己连反射,Linq都一知半解。但并不是反对新人学习设计模式,一些思想还是不错。
解决方案九:
优点:高内聚,低耦合,可以提高代码重用性。就我理解,设计模式的核心目的是对系统的功能进行解耦,最终目标是当我需要增加一个什么功能的时候我只需要关心我现在需要增加的功能,而不去关心以前的。
解决方案十:
设计模式对C#无用这个观点我不赞同。就拿最简单的单例来说,虽说C#有static可以冒充单例,但实现惰性加载的单例,还是要靠经典的写法。抽象工厂,用反射实现,并不能说明没有用设计模式,而只是把case换成了反射而已。
解决方案十一:
引用6楼caozhy的回复:

比如说,你需要一个类工厂,这是你的设计意图,设计模式告诉你怎么做呢?objectFactory(stringproductName){switch(productName){case"Class1":returnnewClass1();break;case"Class2":returnnewClass2();break;...}}对不对?事实上,工厂模式是为了解决C++语言没有反射这个特性而不得已才用的方法。C#中,我们仍然会用到“工厂”这个设计,但是用不到"工厂方法"这个设计模式。C#的做法是什么?objectFactory(stringproductName){returnActivator.CreateInstance(productName);}再比如说“策略模式”,它解决的问题是C++语言没有委托语法,通过一系列固定的编码人肉展开一个委托(事实上C++也没有接口,我们这里按照Java程序员对设计模式的用法来写):interfaceIStrategy{intDo(stringparam);}classStrategy1:IStrategy{publicintDo(stringparam){/*这里放入策略代码*/}}classProgram{voidfoo(IStrategys){...intr=s.Do(xxx);//应用策略...}}但是C#支持委托,何苦这么写?C#的写法应该是:classProgram{publicdelegateintStrategyDelegate(stringparam);voidfoo(StrategyDelegates){...intr=s(xxx);//应用策略...}}举2个例子只是告诉你,设计模式不用学,设计模式不会告诉你怎么设计,只有你知道了怎么设计,他告诉你在缺乏某种语言特性的语言上如何人肉模拟这些语法。这是设计模式的本质。用C#,你学好它优雅的语法就够了。

呵呵,思想可以应用多的场景,语法只能应用单一场景。假如公司明天让他用C++写,他不是要问为毛那个方法不能用,真傻逼这个C++。有一些人思想达不到您那种高度可以根据需求写设计模式的,所以他们才要学,要都跟你那么牛B谁还看设计模式。
解决方案十二:
呵呵,项目是混沌地,属于那只可怜地薛老师地猫,既生且死,既死且生他是多种量子态的叠加,设计模式只是一种量子态所以我们不说设计模式没用,也不说设计模式有用。因为他只是一种量子态,如果设计模式是生,那么你就忽略的死,如果设计模式是死,你就忽略了生所以我说学他没问题,只不过你要知道他只是其中地一种而已,你可以通过他理解他这一面的表征,但是千万别说他就是项目地全部还是我以前说地,对象,过程,函数,逻辑,声明---一个不能少,多种量子态叠加才是真正地表达
解决方案十三:
版主说设计模式对c#无用是版主的观点。。我的观点是对所有语言通用,一种编程思想。。在适合的场景用适合的设计模式。。
解决方案十四:
你们都回答错了...C#只是一个语言而已....哪有什么模式
解决方案十五:
设计模式对所有语言通用,关键是会不会用,或者说需不需要用。毕竟解决问题才是关键!
解决方案:
引用13楼diaodiaop的回复:

你们都回答错了...C#只是一个语言而已....哪有什么模式

确实,应该是面向对象设计模式
解决方案:
设计模式最大的好处就是代码写完了找出其中的设计模式给那些说代码不好的人!!!!!!!
解决方案:
设计模式最大的好处是代码长了不乱套了
解决方案:
c#不是一种设计模式==设计模式就像gofbook提到的那二十几种一样有什么迭代器观察者中介者状态机模式可以用于cppjava当然也可以用于c
解决方案:
#设计模式,是指编程中的各种小伎俩的汇总和提炼。就这个词儿而言,显然没有任何问题。但是如果你说的GOF的“设计模式”那本书中的“设计模式”,那么有没有多看看.netframework里边的比它多100倍的设计模式呢?你有没有想过需要学习什么新的.net模式呢?这其实就好像一个到美国的海军陆战队里学习的人,满脑子只有一点“咏春拳”的架势,他有没有看看人家陆战队里学习什么新的“战斗模式”呢?
解决方案:
实际上,这是基于实际的情况而提出的问题。如果你学的是“咏春拳”或者“太极拳”或者“少林拳”,你用到了现代的自由搏击中,甚至用到了战场上,就是个“速死”的下场。但是就写一本入门“模式”书来说,显然那类模式更容易被外行津津乐道,因为它天生具有表演成分。以“雷人的名词儿”来适应“标题党”的戏剧性描述,加上繁琐的接口,加上极少的设计知识,这就是GOF的设计模式。但是我们只有用更加丰富的设计模式,例如我们通过说明各种事件驱动、命令驱动、状态、缓存等等基本技术,才能说明为什么GOF的设计模式的“表演姿势”与背后的实践能力不匹配。
解决方案:
引用20楼sp1234的回复:

实际上,这是基于实际的情况而提出的问题。如果你学的是“咏春拳”或者“太极拳”或者“少林拳”,你用到了现代的自由搏击中,甚至用到了战场上,就是个“速死”的下场。但是就写一本入门“模式”书来说,显然那类模式更容易被外行津津乐道,因为它天生具有表演成分。以“雷人的名词儿”来适应“标题党”的戏剧性描述,加上繁琐的接口,加上极少的设计知识,这就是GOF的设计模式。但是我们只有用更加丰富的设计模式,例如我们通过说明各种事件驱动、命令驱动、状态、缓存等等基本技术,才能说明为什么GOF的设计模式的“表演姿势”与背后的实践能力不匹配。

诶你还是不明白,这就是为什么李小龙学了咏春拳后来又创出了适合自己的功夫,永春拳只是用来作为适合自己功夫的一种启发,而并非用来实战的功夫。难道你学历咏春拳就要用咏春拳去打遍天下无敌手?真正的功夫是利用自己的长处干掉对方的短处来设定的,而并非千篇一律的咏春拳。
解决方案:
引用19楼sp1234的回复:

设计模式,是指编程中的各种小伎俩的汇总和提炼。就这个词儿而言,显然没有任何问题。但是如果你说的GOF的“设计模式”那本书中的“设计模式”,那么有没有多看看.netframework里边的比它多100倍的设计模式呢?你有没有想过需要学习什么新的.net模式呢?这其实就好像一个到美国的海军陆战队里学习的人,满脑子只有一点“咏春拳”的架势,他有没有看看人家陆战队里学习什么新的“战斗模式”呢?

一言以敝之,西方有句谚语,如果你的手上只有锤子,那么你看什么都觉得像钉子。设计模式(我说的是gof的那20几种)就是一些在C++这个特定语言上的一组实现特定设计意图的“小伎俩”。要命的是,大量培训班出来的学员,以为设计模式就是用来“改良代码”甚至“改良设计”的药方,本末倒置,他不再思考代码怎么写了,而是总思考“这里应该用什么模式”,就如同锤子没有错。但是你给一个三岁小孩一把锤子,并且忽悠他,这是万能的神器。结果这熊孩子看见什么都想砸一下。那就是搞破坏了。
解决方案:
引用22楼caozhy的回复:

Quote: 引用19楼sp1234的回复:
设计模式,是指编程中的各种小伎俩的汇总和提炼。就这个词儿而言,显然没有任何问题。但是如果你说的GOF的“设计模式”那本书中的“设计模式”,那么有没有多看看.netframework里边的比它多100倍的设计模式呢?你有没有想过需要学习什么新的.net模式呢?这其实就好像一个到美国的海军陆战队里学习的人,满脑子只有一点“咏春拳”的架势,他有没有看看人家陆战队里学习什么新的“战斗模式”呢?

一言以敝之,西方有句谚语,如果你的手上只有锤子,那么你看什么都觉得像钉子。设计模式(我说的是gof的那20几种)就是一些在C++这个特定语言上的一组实现特定设计意图的“小伎俩”。要命的是,大量培训班出来的学员,以为设计模式就是用来“改良代码”甚至“改良设计”的药方,本末倒置,他不再思考代码怎么写了,而是总思考“这里应该用什么模式”,就如同锤子没有错。但是你给一个三岁小孩一把锤子,并且忽悠他,这是万能的神器。结果这熊孩子看见什么都想砸一下。那就是搞破坏了。

他不再思考代码怎么写了,而是总思考“这里应该用什么模式我承认如果你说的这点成立的话那么你说的观点也一定成立,可惜这样的人有,但是并非全部,所以你的观点无法成立。因为只要是个智商正常的人,用您说的这种方式尝试着去写代码的时候他会发现很难。
解决方案:
不明白设计模式有什么用。用起来一点也不爽。那么多限制和规则。想想都累!
解决方案:
米饭的优缺点
解决方案:
个人观点是:设计模式不用过度高估,但也不要觉得一文不值,有些时候你可以去生搬硬套,因为大多数设计模式就是为了解决某类问题而存在的,但更多的,还是在用的过程中更好的了解设计模式的SOLID原则
解决方案:
我的一点浅薄看法,那二十多种设计模式,基本上都是用接口类、抽象类、包含类以及子类对象赋值给父类这几个东西的组合变幻。我有一个不是很明白的地方是,一个类A,A自己包含自己,或者类A包含了一个接口类B,这个接口类B里面又包含了类A,这种用法,我不是很理解它的用途是什么?希望大神赐教一下。
解决方案:
引用6楼caozhy的回复:

比如说,你需要一个类工厂,这是你的设计意图,设计模式告诉你怎么做呢?objectFactory(stringproductName){switch(productName){case"Class1":returnnewClass1();break;case"Class2":returnnewClass2();break;...}}对不对?事实上,工厂模式是为了解决C++语言没有反射这个特性而不得已才用的方法。C#中,我们仍然会用到“工厂”这个设计,但是用不到"工厂方法"这个设计模式。C#的做法是什么?objectFactory(stringproductName){returnActivator.CreateInstance(productName);}再比如说“策略模式”,它解决的问题是C++语言没有委托语法,通过一系列固定的编码人肉展开一个委托(事实上C++也没有接口,我们这里按照Java程序员对设计模式的用法来写):interfaceIStrategy{intDo(stringparam);}classStrategy1:IStrategy{publicintDo(stringparam){/*这里放入策略代码*/}}classProgram{voidfoo(IStrategys){...intr=s.Do(xxx);//应用策略...}}但是C#支持委托,何苦这么写?C#的写法应该是:classProgram{publicdelegateintStrategyDelegate(stringparam);voidfoo(StrategyDelegates){...intr=s(xxx);//应用策略...}}举2个例子只是告诉你,设计模式不用学,设计模式不会告诉你怎么设计,只有你知道了怎么设计,他告诉你在缺乏某种语言特性的语言上如何人肉模拟这些语法。这是设计模式的本质。用C#,你学好它优雅的语法就够了。

讲得太透彻了!
解决方案:
接口有一个作用,就是它的实现类可以更方便地被替换。比方说使用ioc技术将此接口注册到新的实现类,从而实现实现类的随意更换
解决方案:
接口是一种规范,规范了你实现的方法名称,参数与返回结果

时间: 2024-10-06 17:15:21

c# 设计模式的优缺点的相关文章

提高移动电子商务销售的交互设计模式

译者注:2012年,各大电商巨头以及品牌商的移动终端订单量都呈现出迅猛增长的态势.人人已经看见,移动电商已经来了.那么设计优良的移动购物体验必将能争夺更多的用户,提升销售额.本文较为全面的介绍了移动购物流程中各环节的交互设计模式,供大家参考学习. 原文地址:http://uxdesign.smashingmagazine.com/2012/12/19/boost-your-mobile-e-commerce-sales-with-mobile-design-patterns/ 现在越来越多的人使

couchdb-各位大神快进来java解答

问题描述 各位大神快进来java解答 本人大二学生,以后想往java方向发展,到课堂学的东西毕竟有限,所以希望各位有没有什么好的建议对于我在java中该干些什么,或者买些什么书 解决方案 首先,Java基础无语法系统了解,会用也还了解其原理,经典书籍<<Java编程思想>>和<<Java编程规范>>:其次,就是Java Web l技术框架,系统地了解,学会用:最后就是进阶学习,Java虚拟机底层知识,Java并发编程基础.关注jdk源代码,那都是大师级人物的

如何拿到阿里技术offer:从《阿里巴巴面试总结与感悟》体味阿里社会招聘

我们在学习Java Web开发技术的时候,老师告诉我们淘宝的架构都是使用Java写的,我怀着好奇心就开始搜索相关的问题,在知乎上看到这样一篇帖子<淘宝主要是用 Java 实现的,这是真的吗?>(链接),其中回答者中有一位是支付宝核心域高可用架构师,他的回答可以说算是半官方的了,的确不光是淘宝,整个阿里系基本也是全线Java,而且水平在国际上也是一流的,世界上很少有Java的系统可以面对像淘宝支付宝这样的高并发,大数据的挑战,这里已经把Java技术发挥到了极致,比如自定制GC,编写针对CPU优化

面试感悟:3年工作经验程序员应有的技能

前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的. 简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成功的有4家,另外两家失败的原因在于: 1.阿里巴巴B2B事业部的面试,两轮技术面试都过了,最后一轮

Java多线程与并发库高级应用

想快速精通多线程?看这里  http://blog.chinaunix.net/uid-540802-id-4431193.html 什么是线程         线程,是程序执行流的最小单元.是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源,一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行.在单个程序中同时运行多个线程完成不同的工作,称为多线程.当自己想

一名3年工作经验的程序员应该具备的技能

细读本文需要6分钟 与你共勉 背景介绍 LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成功的有4家,另外两家失败的原因在于: 1.阿里巴巴B2B事业部的面试,两轮技术面试都过了,最后一轮面试是对方的主管,由于听说技术面试过了基本上90%都面试成功了,所以LZ在和主管的交谈中也是毫无顾忌,说得天花乱坠,很多自己介于知道和不知道的东西都直接脱口而出了,结果多次被对方一反问就问得

成为Java顶尖程序员 ,看这11本书就够了

"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 2.对着书上的代码自己敲的时候方便 "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下

详解C++设计模式编程中策略模式的优缺点及实现_C 语言

策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法的变化不会影响到使用算法的客户.策略模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦.策略模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现.State 模式也有类似的功能,他们之间的区别将在讨论中给出. UML图

C# 设计模式----抽象工厂模式

原文地址:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是