`
wangyonghe
  • 浏览: 43173 次
社区版块
存档分类
最新评论

Presentation Context

阅读更多

1. 目的

使界面代码承担的职责更少,便于代码的维护,提高代码可读性。

2. 动机

我们在编写客户端代码的时候,经常会用到字符资源、图片资源以及多个View 间共享实例,这些职责如果由View 自己负责,一方面,降低了代码的重用性(资源加载的代码),另一方面,也使View 承担了更多的职责,不利用View 的维护。如果这部分职责由外部实现,View 又如何访问这些资源。这就是Presentation Context 的模式所要解决的问题。

3.参与者

1. Presentation Context:它封装了View 在创建时所需要的上下文信息,并且可以作为多个View 之间共享对象的容器。

2. Component Factory:它负责创建Swing 控制和平台自定义的控制。使用Componet Factory 的好处是可以统一的控制系统内部的控件,例如:通过Component Factory 创建的对话框都可以点击Esc 键关闭,点击F1 出现Help 对话模式。

4. 特点

1. 优点:(1)使用Presentation Context 可是分解View 的职责,使View 的代码更容易维护。 (2) 使加载资源的代码可以被重用。(3)使多个View 间可以方便的共享对象。(4)使View 更容易访问客户端平台开放的接口。

5. 实现

1) ComponentFactory 接口代码

java 代码
 
  1. public interface ComponentFactory {
  2. public JLabel createJLabel(String labelText);
  3. public JDialog createJDialog(JComponent content);
  4. // ...
  5. }

2) ImageResourceFactory 接口代码

java 代码
 
  1. public interface ImageResourceFactory {
  2. public Image getImage(String imageId);
  3. public Icon getIcon(String iconId);
  4. }

3) PresentationContext 接口代码

java 代码
 
  1. public interface PresentationContext {
  2. public ResourceBundle getResourceBundle();
  3. public ComponentFactory getComponentFactory();
  4. public ImageResourceFactory getImageResourceFactory();
  5. public void setProperty(String name, Object value);
  6. public Object getProperty(String name);
  7. }

4) SampleView 代码

java 代码
 
  1. public class SampleView extends JPanel {
  2. private PresentationContext presentationContext;
  3. private ComponentFactory componentFactory;
  4. public SampleView(PresentationContext presentationContext) {
  5. this.presentationContext = presentationContext;
  6. componentFactory = presentationContext.getComponentFactory();
  7. constructUI();
  8. }
  9. protected void constructUI() {
  10. ResourceBundle resourceBundle = presentationContext.getResourceBundle();
  11. ImageResourceFactory imageResourceFactory = presentationContext
  12. .getImageResourceFactory();
  13. // Create a label with component factory that is injected by
  14. // presentation context.
  15. JLabel label = componentFactory.createJLabel(resourceBundle
  16. .getString("label.text"));
  17. label.setIcon(imageResourceFactory.getIcon("label.icon"));
  18. }
  19. public void showAsDialog() {
  20. JDialog dialog = componentFactory.createJDialog(this);
  21. dialog.pack();
  22. dialog.setVisible(true);
  23. }
  24. }

说明:

1) SampleView 中的文本资源和图片资源都是外部进行加载的,一般应用时可以由平台提供代码实现,然后各模块自己注入相应的路径。

2) SampleView 中的dialog 都是由平台提供的ComponentFactory 进行创建的,实现时平台可以在创建时,默认注册Esc 键的Listener。

6. 注意事项

1.Presentation Context 可以包含更多与特定客户端平台相关的内容,在应用时可以根据具体情况使用,但是要注意它里面不应该包含和领域逻辑相关的任何内容。

2.一个模块应该只有一个Presentation Context 实例,最好由平台创建或者有模块的Facade 负责创建。

  • 大小: 14.9 KB
分享到:
评论
8 楼 wangyonghe 2006-12-28  
ComponentFactory 是一个抽象工厂,用于创建平台系列的组件,当我们的模块被加入到不同的平台时组件可以有不同的实现,这样的好处有是:平台的一些特性可以统一被处理,不需要在模块代码中零碎增加处理平台特性的代码。
7 楼 shaucle 2006-12-28  
很不错的架构.

Context就像是在Model和View之间再加了一层.
只是像ComponentFactory这种会不会显得很庸肿?
6 楼 wangyonghe 2006-12-27  
有人关心吗?这个模式我已经在我的项目中应该了多次,
如果大家不能够看懂模式,可以告诉我,我再修改一下。
5 楼 wangyonghe 2006-12-27  
代码示例补充完毕。
4 楼 wangyonghe 2006-12-27  
shaucle 写道
给个具体的例子吧...
我会尽快补充一个代码示例。
3 楼 shaucle 2006-12-27  
给个具体的例子吧...
2 楼 wangyonghe 2006-12-26  
怎么没人回应呀?这种模式是好还是坏,还是根本就不值得一提呀?
1 楼 wangyonghe 2006-12-26  
没有人参与讨论吗?

相关推荐

    ASN探索,对了解ASN有一定帮助

    抽象语法和传输语法的组合称为表示上下文(Presentation Context),通过整数标识,并且通常使用偶数和奇数来避免上下文ID的冲突。表示上下文允许在通信过程中动态协商,以适应不断变化的需求。应用层的数据根据当前...

    IOS应用源码——搜索提示自动填充.zip

    - 使用UISearchController的`presentationContext(_:for:)`方法可以设置搜索结果的呈现方式,比如是否覆盖原界面或作为导航栏的一部分。 5. 用户交互处理: - 当用户选择一个搜索建议时,需要处理相应的点击事件...

    对DICOM协议PDU的解读

    - **Presentation Context Item:** 这里定义了抽象语法(Abstract Syntax),它指定了应用层数据元素和应用层协议控制信息。每个抽象语法都有一个唯一标识符(Service-Object Pair Class UID 或 Meta Service-Object...

    Android代码-Presentation.zip

    public MyPresentation(Context context, Display display) { super(context, display); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

    Presentation与自定义Dialog的使用

    2. 在构造函数中,传入当前的`Context`,以及`Display`对象,代表你希望展示的屏幕。 3. 在`onCreate`方法中,设置并布局你在外部屏幕上的UI。 接下来,我们讨论`Dialog`。`Dialog`是一种弹出式窗口,它在应用的上...

    Android Presentation实现双屏异显

    },在它的形参中第一个 Context 参数非常重要,这是应用正在展示 presentation 的一个 context,它是 Presentation 自己创建的它自己的一个 context,基于这个 context 才能正确的在它所关联的屏幕上展示合适的信息...

    Android多屏显示-Presentation

    创建`Presentation`时,需要传入一个`Context`(通常是你当前的`Activity`)和一个`Display`对象,指定在哪个屏幕上显示内容。这样,你可以为每个屏幕创建不同的`Presentation`实例,呈现定制化的界面。 在创建`...

    Windows Presentation Foundation 4.5 Cookbook的源码

    Windows Presentation Foundation 4.5 Cookbook的源码 Chapter 1: Foundations 7 Introduction 7 Creating custom type instances in XAML 9 Creating a dependency property 15 Using an attached property 25 ...

    Applied.WPF.4.in.Context(第1版)

    《Applied WPF 4 in Context》这本书主要介绍了如何利用Windows Presentation Foundation(WPF)创建高质量、功能丰富的Windows应用程序。本书不仅涵盖了WPF的基础知识,还深入探讨了如何在实际业务应用中高效地使用...

    Applied WPF 4 In Context

    《应用WPF 4实战》是一本深度探讨Windows Presentation Foundation (WPF)技术的专业书籍,专注于在实际开发环境中应用WPF 4的知识。这本书不仅提供了理论基础,更结合了丰富的实例代码,帮助读者深入理解并掌握WPF的...

    android.app.TestPresentationDualDisplay:从ApiDemos

    public MyPresentation(Context context, Display display) { super(context, display); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

    Applied WPF 4 in Context

    **Windows Presentation Foundation (WPF)** 是由微软开发的一个图形化计算机平台,旨在为Windows系统创建丰富的客户端应用程序。WPF提供了一种强大的方式来构建既有动画效果又有出色图形表现力的界面,同时也支持...

    android双屏异显的实现

    在本文中,我们将深入探讨如何利用`Android Presentation`来实现这一功能,以满足客户在辅助显示器上显示独特内容的需求。 首先,了解`Android Presentation`类是关键。`Presentation`是Android提供的一个特殊的`...

    AndroidPresentationDemo.7z

    2. **创建Presentation**:在检测到外部显示器后,创建`Presentation`实例,传入`Display`对象和`Context`。这样,`Presentation`将在指定的屏幕上显示。 3. **定义展示内容**:在`Presentation`的`onCreate()`方法...

    Apress.Applied.WPF.4.in.Context.2011

    《Apress.Applied.WPF.4.in.Context.2011》是一本深入探讨Windows Presentation Foundation(WPF)和XAML技术的专业书籍,由Apress出版社出版于2011年。该书全面覆盖了WPF的核心概念、设计模式、多线程、Web服务交互...

    android 双屏异显demo源码

    创建一个`Presentation`需要继承自`Presentation`类,并在构造函数中传入`Context`(通常为当前活动`Activity`)以及`Display`对象,表示要在哪个屏幕上展示。`Display`可以通过`WindowManager`的`...

    Applied WPF 4 in Context.pdf

    《应用于情境中的WPF 4》这本书主要介绍了如何使用Windows Presentation Foundation (WPF)技术来构建功能丰富、界面美观的应用程序。WPF是微软开发的一个图形计算平台,用于创建适用于Windows系统的富客户端应用。...

    Applied.WPF.4.in.Context(第1版)].源代码

    《Applied WPF 4 in Context》是一本深入探讨Windows Presentation Foundation (WPF)技术的书籍,专注于实际应用的场景。该书的第1版源代码包含在提供的压缩包中,这些代码是配合书中的章节进行学习和实践的重要参考...

    Android实现两块屏幕分屏显示

    它有自己的`Context`,可以在不同的显示屏上呈现独立的界面。创建`Presentation`时需要传入`Display`对象,这样内容就能在指定的屏幕上显示。 5. **处理屏幕切换**:当用户移动或旋转设备时,需要监听`Display`的...

Global site tag (gtag.js) - Google Analytics