<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    人在江湖

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    參考: http://en.wikipedia.org/wiki/Decorator_pattern

    class=thumbimage

    Motivation

    class=thumbimage

    UML Diagram for the Window Example

    As an example, consider a window in a windowing system. To allow scrolling of the window's contents, we may wish to add horizontal or vertical scrollbars to it, as appropriate. Assume windows are represented by instances of the Window class, and assume this class has no functionality for adding scrollbars. We could create a subclass ScrollingWindow that provides them, or we could create a ScrollingWindowDecorator that adds this functionality to existing Window objects. At this point, either solution would be fine.

    Now let's assume we also desire the ability to add borders to our windows. Again, our original Window class has no support. The ScrollingWindow subclass now poses a problem, because it has effectively created a new kind of window. If we wish to add border support to all windows, we must create subclasses WindowWithBorder and ScrollingWindowWithBorder. Obviously, this problem gets worse with every new feature to be added. For the decorator solution, we simply create a new BorderedWindowDecorator—at runtime, we can decorate existing windows with the ScrollingWindowDecorator or the BorderedWindowDecorator or both, as we see fit.

    Another good example of where a decorator can be desired is when there is a need to restrict access to an object's properties or methods according to some set of rules or perhaps several parallel sets of rules (different user credentials, etc.) In this case instead of implementing the access control in the original object it is left unchanged and unaware of any restrictions on its use, and it is wrapped in an access control decorator object, which can then serve only the permitted subset of the original object's interface.

    Example

    The following Java example illustrates the use of decorators using the window/scrolling scenario.

       1: // the Window interface
       2:  
       3: interface Window {
       4:  
       5:     public void draw(); // draws the Window
       6:  
       7:     public String getDescription(); // returns a description of the Window
       8:  
       9: }
      10:  
      11: // implementation of a simple Window without any scrollbars
      12:  
      13: class SimpleWindow implements Window {
      14:  
      15:     public void draw() {
      16:  
      17:         // draw window
      18:  
      19:     }
      20:  
      21:     public String getDescription() {
      22:  
      23:         return "simple window";
      24:  
      25:     }
      26:  
      27: }
      28:  
      29:  
      30:  
      31: // abstract decorator class - note that it implements Window
      32:  
      33: abstract class WindowDecorator implements Window {
      34:  
      35:     protected Window decoratedWindow; // the Window being decorated
      36:  
      37:     public WindowDecorator (Window decoratedWindow) {
      38:  
      39:         this.decoratedWindow = decoratedWindow;
      40:  
      41:     }
      42:  
      43: }
      44:  
      45:  
      46:  
      47: // the first concrete decorator which adds vertical scrollbar functionality
      48:  
      49: class VerticalScrollBarDecorator extends WindowDecorator {
      50:  
      51:     public VerticalScrollBarDecorator (Window decoratedWindow) {
      52:  
      53:         super(decoratedWindow);
      54:  
      55:     }
      56:  
      57:     public void draw() {
      58:  
      59:         drawVerticalScrollBar();
      60:  
      61:         decoratedWindow.draw();
      62:  
      63:     }
      64:  
      65:     private void drawVerticalScrollBar() {
      66:  
      67:         // draw the vertical scrollbar
      68:  
      69:     }
      70:  
      71:     public String getDescription() {
      72:  
      73:         return decoratedWindow.getDescription() + ", including vertical scrollbars";
      74:  
      75:     }
      76:  
      77: }
      78:  
      79:  
      80:  
      81: // the second concrete decorator which adds horizontal scrollbar functionality
      82:  
      83: class HorizontalScrollBarDecorator extends WindowDecorator {
      84:  
      85:     public HorizontalScrollBarDecorator (Window decoratedWindow) {
      86:  
      87:         super(decoratedWindow);
      88:  
      89:     }
      90:  
      91:     public void draw() {
      92:  
      93:         drawHorizontalScrollBar();
      94:  
      95:         decoratedWindow.draw();
      96:  
      97:     }
      98:  
      99:     private void drawHorizontalScrollBar() {
     100:  
     101:         // draw the horizontal scrollbar
     102:  
     103:     }
     104:  
     105:     public String getDescription() {
     106:  
     107:         return decoratedWindow.getDescription() + ", including horizontal scrollbars";
     108:  
     109:     }
     110:  
     111: }
     112:  
     113:  
     114:  
     115: public class DecoratedWindowTest {
     116:  
     117:     public static void main(String[] args) {
     118:  
     119:         // create a decorated Window with horizontal and vertical scrollbars
     120:  
     121:         Window decoratedWindow = new HorizontalScrollBarDecorator (
     122:  
     123:                 new VerticalScrollBarDecorator(new SimpleWindow()));
     124:  
     125:         // print the Window's description
     126:  
     127:         System.out.println(decoratedWindow.getDescription());
     128:  
     129:     }
     130:  
     131: }
    posted on 2011-02-09 22:58 人在江湖 閱讀(991) 評論(0)  編輯  收藏 所屬分類: design pattern
    主站蜘蛛池模板: 手机在线看永久av片免费| 亚洲国产理论片在线播放| 亚洲国产成人精品女人久久久| 成人看的午夜免费毛片| 在线a级毛片免费视频| 久久综合AV免费观看| 永久免费的网站在线观看| 成人午夜免费福利视频| 人成午夜免费视频在线观看| 97人妻无码一区二区精品免费| 无码区日韩特区永久免费系列| 亚州免费一级毛片| 久久精品无码一区二区三区免费| 97无码免费人妻超级碰碰碰碰 | 亚洲精品第一国产综合亚AV| 亚洲日韩一区二区三区| 亚洲AV香蕉一区区二区三区| 看成年女人免费午夜视频| 九九久久精品国产免费看小说 | 青草青草视频2免费观看| 国产亚洲人成在线影院| www成人免费视频| 久久久久免费看黄a级试看| 99国产精品永久免费视频| 大学生一级特黄的免费大片视频| 日韩在线免费看网站| 亚洲高清无码综合性爱视频| 亚洲色偷拍另类无码专区| 久久久无码精品亚洲日韩按摩| 亚洲一区二区三区高清视频| 亚洲爆乳成av人在线视菜奈实 | 亚洲国产综合自在线另类| 中文日韩亚洲欧美制服| 免费精品久久久久久中文字幕| 在线观看免费无码视频| 91香蕉成人免费网站| 国产免费观看青青草原网站| 亚洲熟妇丰满多毛XXXX| 亚洲国产美女视频| 污污污视频在线免费观看| 一区二区三区在线免费看|