小哈儿的 学习日记

像疯子一样去战斗!
posts - 13, comments - 0, trackbacks - 0, articles - 0

2007年4月23日

    今天调试一个bug,迷惑了很久。最后发现是关于首选项取值存值问题。
   这里ps为IPreferenceStore对象.

   ps.getString(XXX_KEY)是首选查找首选项 ,如果取出的值为空,如果有default值的话则执行ps.getDefault(XXX_KEY)。

   ps.setValue(XXX_KEY, "XXX")时首先和default中的XXX_KEY比较,如果不同的话才put进去,否则就删除。这也是我今天这个bug的原因。修改办法是用putValue函数来代替setValue.

有什么说的不对的地方欢迎批评指正.

posted @ 2007-08-28 22:17 dayue 阅读(1097) | 评论 (0)编辑 收藏

从插件中获得绝对路径:
        
TestPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());

通过文件得到Project:

IProject project = ((IFile)o).getProject();

通过文件得到全路径:

String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();

得到整个Workspace的根:

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

从根来查找资源:

IResource resource = root.findMember(new Path(containerName));


从Bundle来查找资源:

Bundle bundle = Platform.getBundle(pluginId);
URL fullPathString
= BundleUtility.find(bundle, filePath);

得到Appliaction workspace:

Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath();

得到runtimeworkspace:
  
Platform.getInstanceLocation().getURL().getPath();

从编辑器来获得编辑文件
IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();
IEditorInput input
= editor.getEditorInput();
   if(input instanceof IFileEditorInput){
     IFile file
= ((IFileEditorInput)input).getFile();
   }

posted @ 2007-05-24 18:07 dayue 阅读(336) | 评论 (0)编辑 收藏

       CSS 意思就是 叠层样式表Cascading Style Sheets ,样式定义了HTML元素怎样去显示,样式一般存储在样式表中,外部样式表存储在CSS文件中。使用CSS,你的HTML文档可以用不同的样式输出来显示。
       HTML标签起初被设计成为定义文档的内容。通过使用像<h1>,<p>,<table>这样的标签他们应该表达的是"这是一个标题","这是一个段落","这是一张表格",而布局该由浏览器来处理并非使用格式化标签. 作为两大浏览器 - 网景 和 IE - 不断地将新的HTML标签和属性(像<font>标签和颜色属性)添加到原来的HTML规格中,这让建立清晰的HTML文档内容并从形式中分离出来变的越来越困难.为了解决这个难题,W3C 这个非赢利的,建立标准的组织,为HTML4.0增加了样式。所有主流浏览器都支持样式表。
        样式表定义元素怎样去显示,就像在HTML3.2中字体标签和颜色属性一般保存在一个外部的.css文件一样.外部样式表能够让你改变所有出现在你WEB中的外观和布局,而仅仅通过编辑一个单独的CSS文档.(原理就是一动多变)。
         当多于一种的样式指定一HTML元素时使用怎样的样式呢?
  1. 浏览器默认
  2. 外部样式表
  3. 内嵌样式表(在<head>标签内)
  4. 行内样式(在一HTML元素内) (最高优先级)

posted @ 2007-05-08 17:48 dayue 阅读(292) | 评论 (0)编辑 收藏

  1. 单一职责原则(SRP):一个类应当只有一个改变的原因,类只需要知道一件事情,它们应当有一个单独的职责,要点就是当一个类需要改变时,应当只有一个原因。
  2. 开放-封闭原则(OCP):软件实体(类、模块、函数等)应当为扩展而开放,又为修改而封闭。这个原则有一个相当详细的定义,但是一个简单的意思是:你应当能够改变一个模块的周边环境而无须改变模块本身。
  3. Liskov替换原则(LSP):子类型(subtypes)必须是为它们的基类型(base types)可替代的。
  4. 依存关系倒置原则(DIP) :A.高层模块应当不依赖低层模块,它们应当依赖于抽象。
                                                  B.抽象应当不依赖于细节,细节应当依赖于抽象。
    更好的描述是:不要依赖那些容易变化的具体类。如果你要继承一个类,从一个抽象类继承吧。如果你要持有一个类的引用,从一个抽象的类引用吧。如果你要调用一个函数,从一个抽象的函数调用吧。
  5. 接口隔离原则(ISP):客户不应当依赖那些它们根本不用的方法。

总结:
五个简单的原则是:
1、SRP--一个类应当只有一个发生变化的原因。
2、OCP――应当能够改变一个类的环境,而无须改变类本身。
3、LSP――避免造成派生类的方法非法或退化,一个基类的用户应当不需要知道这个派生类。
4、DIP ――用依赖于接口和抽象类来替代依赖容易变化的具体类。
5、ISP――给一个对象的每一个用户一个接口,这个接口仅有用户需要的方法。

 

posted @ 2007-04-30 15:27 dayue 阅读(374) | 评论 (0)编辑 收藏

        命令模式是一个行为型模式,允许你创造一个对象的命令然后在需要时候可以执行。当你想创造一个undo/redo,log操作或者在稍晚时候执行命令时这个模式是有用的。
        在这个模式里一个命令接口是必需的。对一个命令对象来说,它必须事先实现这个命令的方法。下面是一个简单的命令接口,有一个方法需要实现执行的。
public interface Command{
 
         
public void execute();
}
         所有被命令的类必须实现这个命令接口。下面是一个简单的命令:当执行时控制台打印"hello world"。
public class HelloCommand implements Command{
         
public void execute(){

          System.out.println(
"Hello World");
}

}

           
         你可以创建一个HelloCommand的实例然后执行这个方法。

posted @ 2007-04-30 14:13 dayue 阅读(273) | 评论 (0)编辑 收藏

在实现了IWorkbenchWindowActionDelegate接口的类中:
private IWorkbenchWindow window;

public void init(IWorkbenchWindow window) {
   
this.window = window;
}

public void run(IAction action) {
   Shell parentShell 
= window.getShell();
   MyDialog dialog 
= new MyDialog(parentShell, );
    etc 
}


在实现了IObjectActionDelegate 接口的类中:
private IWorkbenchPart targetPart;

public void setActivePart(IAction action, IWorkbenchPart targetPart)
{
   
this.targetPart = targetPart;
}


public void run(IAction action) {
   IWorkbenchPartSite site 
= targetPart.getSite();
   MyDialog dialog 
= new MyDialog(site, );
    etc 
}


IViewPart 或者IEditorPart
IShellProvider shellProvider = viewOrEditor.getSite();
PlatformUI:
Shell parentShell =
   PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();

Display
Shell parentShell = Display.getDefault().getActiveShell();


以上各种方法对于获取其它的一些rcp中的重要对象也都有借鉴意义。

posted @ 2007-04-23 14:00 dayue 阅读(1197) | 评论 (0)编辑 收藏