找回密码
 注册
搜索
热搜: java php web
查看: 1045|回复: 7

设计模式中使用"客户端"问题

[复制链接]
发表于 2009-1-25 19:59:26 | 显示全部楼层 |阅读模式
设计模式中使用"客户端"问题
很多的书籍中,对模式调用、构造的“客户端”方法都没有描述的很清楚,所以造成一些设计人员的设计错误。在面向对象的设计中,尤其是面向接口编程的过程中,我觉得对象[组]的创建和构造是非常常用和容易范错的地方,只有明确这些部分是"客户端"才能合理的区分对象职责和去掉设计中的"臭味"。

举一个关于工厂方法模式的例子:
复制内容到剪贴板
代码:

public abstract class DirectDAO {

  public static DirectDAO getDirectDAO() {       //错误的工厂方法
    return new SqlServerDirectDAO();
  }

  public abstract void addFile(LyFile file) throws LyException;

  public abstract void addFolder(LyFolder folder) throws LyException;

  public abstract void deleteDirectById(String id) throws LyException;

  public abstract void updateDirect(LyDirect direct) throws LyException;

  public abstract Map  getDirectMap() throws LyException;
}
static DirectDAO getDirectDAO()方法是工厂方法,我看到该实现非常不符合开闭原则(OCP),将来有新
实例必须重写该方法,就问我的同事为什么这么设计,他告诉我说,这样作可以由该类本身构造实例(并
举出java.security.MessageDigest.getInstance的例子)。实际上这个错误是不愿在类库设计中依赖于"
客户端"代码构造合理的工厂的原因,该类应该如下设计:
由具体的客户端代码〔一般在main中〕
     
DirectDAO.setDirectDAO(new SqlServerDirectDAO())来初试化该类,这样则符合OCP。
另外可以参考Ioc的描述。

希望大家多多交流
发表于 2009-1-25 21:11:02 | 显示全部楼层
支持一下吧..
回复

使用道具 举报

发表于 2009-1-25 20:52:38 | 显示全部楼层
回复 1# 的帖子
回复

使用道具 举报

发表于 2009-1-25 21:37:45 | 显示全部楼层
不是很了解但是支持一下
回复

使用道具 举报

发表于 2009-1-25 20:19:31 | 显示全部楼层
恩 分析清晰
回复

使用道具 举报

发表于 2009-1-25 21:33:31 | 显示全部楼层
好东东啊,不错.大宋提刑官
回复

使用道具 举报

发表于 2009-1-25 20:50:57 | 显示全部楼层
解说的挺好,dddddd
回复

使用道具 举报

发表于 2009-1-25 20:19:12 | 显示全部楼层
re
恩,不错!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-9-20 15:35

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表