感觉有点象天书,又象是在看哲学书,玩词句

Yanbin_Q 2003-08-13 07:08:28
是不是真的一本书要重复看几遍才能基本上有所了解啊
...全文
48 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunhi 2003-09-18
  • 打赏
  • 举报
回复
一本不可多得的好书,作者为了让大家理解透彻各种模式及其相互间的关系,引经据典可谓煞费苦心呀,这是一本真正用心写的书。我觉得已经对面向对象编程有深入了解的人,或者想要对面向对象编程深入了解的人都可以好好看看这本书。
Yanbin_Q 2003-09-17
  • 打赏
  • 举报
回复
说白了,就是实战经验很重要
Yanbin_Q 2003-09-17
  • 打赏
  • 举报
回复
现在看〖JAVA与模式〗真的好过瘾啊,弄每晚都睡得太晚。
里面说的各种原则都有相互相冲突性,只有在实际应用中
正确取舍
staminalim 2003-08-27
  • 打赏
  • 举报
回复
看设计模式,至少要有一定的java基础。至于看书,我认为一定要看几遍的,刚开始看不懂我觉得没关系(我现在就是这个状态),先要把名词记熟,各个模式熟悉,看不懂才说明你在看嘛。看了设计模式,就是要有个意识,在设计程序时多一个心眼,是不是可以用相应的模式来设计,当然不一定一下设计很好,几个模式一起用,只要能用一个,也增加了认识。李维不是也说吗,关键在于用,不在于你看了书,觉得你懂了很多模式很行似的,不用就等于零。

其实我只要写了一些程序的,肯定都不知不觉的用了一些模式,举个例子,我在看Decorator模式时,想起我的一个很简单的程序,就是有一个输出字符串,我想以我的方式显示,就硬编码到了程序了,后来改进了一些,把代码放入了一个方法(方法里面仍然是硬编码的),每次调用这个方法listResult,再后来,觉得也不好,又增加了一个方法,叫displayfiler1,我想如果再想用别的方式显示这个串的话,我就再增加一个方法,叫displayfiler2,这样每次在listResult调用不同的filer即可,其实想想,这也算是一种Decorator.
Yanbin_Q 2003-08-26
  • 打赏
  • 举报
回复
一边做笔记写感想,我觉得很是必要的,同意!
ESoftWind 2003-08-26
  • 打赏
  • 举报
回复
个人认为, Design Pattern 的 OOD 的圣经

楼上有朋友谈到书上例子很空洞,并举了个Decorator的例子.以下是我项目实际用到的Decorator的例子.

做数据库应用时很希望将SQL语句输出到控制台上或做其它的Logging,以便于调试.但如果每次在执行之前都System.out一下会很烦, 以下使用Decorator模式做一个LoggedStatement,使之执行之前都会自动Logging.

public class LoggedStatement
implements Statement
{
private Statement stmt = null;
public LoggedStatement(Statement stmt)
{
this.stmt = stmt;
}

//TODO;
//Delegate all method in stmt.

public ResultSet executeQuery(String statement) throws SQLException
{
//TODO: Logging
System.out.println("Excute Query: " + statement);
return stmt.executeQuery(statement);
}
}
ppopopp 2003-08-24
  • 打赏
  • 举报
回复
需要什么看什么
黑马 2003-08-23
  • 打赏
  • 举报
回复
我看书也很慢,我想该是时候学习设计模式了:)
yanghuanji 2003-08-23
  • 打赏
  • 举报
回复
俺是新手,不过看《JAVA与模式》很过瘾。一边看一边做笔记写感想,还觉得挺顺。
一句话:
激动!
Sundery 2003-08-22
  • 打赏
  • 举报
回复
恩,我才刚开始,不过也有这样的体会
tainy_zhang 2003-08-22
  • 打赏
  • 举报
回复
第一遍看,的确没看懂,因为没有足够的代码量,没有足够的开发经验。
现在看,发现一个个都开始明白了gof的那本的确经典,字字珠玑,还是这本写的透彻
mydudu 2003-08-20
  • 打赏
  • 举报
回复
我看书是:
粗略2遍,大概知道此书说什么
细看n遍,这是才是真正的看书,学习,边看边学
tang_915 2003-08-20
  • 打赏
  • 举报
回复
我感觉看《java与模式》收获非常大。建议大家看看吧
halcyon 2003-08-18
  • 打赏
  • 举报
回复
经验,经验,还是经验。没有碰到过头疼的问题是不会了解好的模式的重要性。
1年后再看该书。体会是--不过二二
Kylix_XP 2003-08-15
  • 打赏
  • 举报
回复
楼上说的很有道理:
模式之难,不在设计,而在什么时候使用模式!!很多设计模式书中所举例子过于简单,空洞,缺乏对真正产品代码的实战分析..举个简单的例子(来自一个网站)!

举Adapter中的打桩示例,在Adapter中有两种类:方形桩 圆形桩,Adapter模式展示如何综合使用这两个类,在Decorator模式中,我们是要在打桩时增加一些额外功能,比如,挖坑 在桩上钉木板等,不关心如何使用两个不相关的类.

我们先建立一个接口:

public interface Work
{
  public void insert();

}



接口Work有一个具体实现:插入方形桩或圆形桩,这两个区别对Decorator是无所谓.我们以插入方形桩为例:

public class SquarePeg implements Work{
  public void insert(){
    System.out.println("方形桩插入");
  }
}



现在有一个应用:需要在桩打入前,挖坑,在打入后,在桩上钉木板,这些额外的功能是动态,可能随意增加调整修改,比如,可能又需要在打桩之后钉架子(只是比喻).

那么我们使用Decorator模式,这里方形桩SquarePeg是decoratee(被刷油漆者),我们需要在decoratee上刷些"油漆",这些油漆就是那些额外的功能.

public class Decorator implements Work{

  private Work work;
  //额外增加的功能被打包在这个List中
  private ArrayList others = new ArrayList();

  //在构造器中使用组合new方式,引入Work对象;
  public Decorator(Work work)
  {
    this.work=work;
  
    others.add("挖坑");

    others.add("钉木板");
  }

  public void insert(){

    newMethod();
  }

  
  //在新方法中,我们在insert之前增加其他方法,这里次序先后是用户灵活指定的   
  public void newMethod()
  {
    otherMethod();
    work.insert();


  }


  public void otherMethod()
  {
    ListIterator listIterator = others.listIterator();
    while (listIterator.hasNext())
    {
      System.out.println(((String)(listIterator.next())) + " 正在进行");
    }

  }


}



在上例中,我们把挖坑和钉木板都排在了打桩insert前面,这里只是举例说明额外功能次序可以任意安排.

好了,Decorator模式出来了,我们看如何调用:

Work squarePeg = new SquarePeg();
Work decorator = new Decorator(squarePeg);
decorator.insert();


Decorator模式至此完成.

其实,这个例子根本就没把使用Decorator理由说清楚!!
使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator提供了"即插即用"的方法,在运行期间决定何时增加何种功能.
看看 Java.io.*;包中的几个类..

BufferedReader br = new BufferedReader(new FileReader(filename));
再看看JUnit源码..中的为TestCase增加功能:
public static Test suite(){
TestSuite suite = new TestSuite();
suite.addTest(new RepeatedTest(new Testmath("testadd"),12));//动态增加RepeatTest 功能
suite.addTest(new TestSetup(RepeatedTest(new Testmath("testadd"),12)));//再动态增加TestSetup 功能

偶觉得从代码学习模式比空洞说教似乎更有效.





Yanbin_Q 2003-08-15
  • 打赏
  • 举报
回复
终于感觉到哲学的统领性。
smartcoffee 2003-08-13
  • 打赏
  • 举报
回复
楼上说的的确是真的。我有切肤之痛啊!
armorking2003 2003-08-13
  • 打赏
  • 举报
回复
我想,这是一个学习习惯的问题

看设计模式,没有相应的经验(或者说是失败的经验:),不简单产生共鸣
这注定了对于一个初学模式者而言,经常会似懂非懂,找不着北

我是初学者,比较讲究细嚼慢咽(半年才看了半本书)
遇到问题的时候,再进行一番反刍,利于消化

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧