科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件使用Decorator模式 翻译者:Disneytiger

使用Decorator模式 翻译者:Disneytiger

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

举例来说,如果你想得到一个带有边框的Swing类型标签,你可以子类化javax.swing.JLabel类。然而,子类化并不总是有效。当继承不能解决问题的时候,你不得不求助与其它的方式。比如,使用Decorator模式。

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字: Disneytiger Decorator

  • 评论
  • 分享微博
  • 分享邮件
¡¡¡¡Ê¹ÓÃDecoratorģʽ
¡¡¡¡Java³ÌÐòÔ±ÖªµÀ¿ÉÒÔͨ¹ýÀ©Õ¹Ò»¸öÀàÀ´¸Ä±äÀàµÄÐÐΪºÍÀ©Õ¹Ò»¸öÀàµÄ¹¦ÄÜ¡£Õâ¸öÐÐΪ±»³ÆΪ¼Ì³Ð,ËüÊÇÃæÏò¶ÔÏó±à³ÌµÄÒ»¸öÖØÒªµÄÌØÐÔ.
¡¡¡¡¾ÙÀýÀ´Ëµ,Èç¹ûÄãÏëµÃµ½Ò»¸ö´øÓб߿òµÄSwingÀàÐͱêÇ©£¬Äã¿ÉÒÔ×ÓÀ໯javax.swing.JLabelÀࡣȻ¶ø£¬×ÓÀ໯²¢²»×ÜÊÇÓÐЧ¡£µ±¼Ì³Ð²»Äܽâ¾öÎÊÌâµÄʱºò£¬Äã²»µÃ²»ÇóÖúÓëÆäËüµÄ·½Ê½¡£±ÈÈ磬ʹÓÃDecoratorģʽ¡£
¡¡¡¡ÕâƪÎÄÕ½âÊÍÁËDecoratorģʽÊÇʲô£¬²¢ËµÃ÷ʲôʱºòÓ¦¸Ã×ÓÀ໯£¬Ê²Ã´Ê±ºòÓ¦¸Ã²ÉÓÃDecorateģʽ¡£
¡¡¡¡ÔÚJavaÓïÑÔÖйؼü×Öextends±»ÌṩÀ´×ÓÀ໯£¨À©Õ¹£©Ò»¸öÀà¡£¾ßÓзḻµÄÃæÏò¶ÔÏó±à³Ì¾­ÑéµÄ³ÌÐòÔ±ÖªµÀ×ÓÀ໯µÄÍþÁ¦¡£Í¨¹ýÀ©Õ¹Ò»¸öÀ࣬ÎÒÃÇÄܹ»¸Ä±äÕâ¸öÀàµÄÐÐΪ¡£ÒÔÁбí1Ëù½²µÄJBorderLabelÀàΪÀý£¬ËüÀ©Õ¹ÁËjavax.swing.JLabelÀ࣬³ýÁ˶àÁËÒ»¸ö±ß¿ò£¬ËüºÍJLabelÀà¾ßÓÐÏàͬµÄÍâ¹ÛºÍÐÐΪ¡£
¡¡¡¡the JBorderLabel class, an example of subclassing
¡¡¡¡package decorator;
¡¡¡¡
¡¡¡¡import java.awt.Graphics;
¡¡¡¡import javax.swing.JLabel;
¡¡¡¡import javax.swing.Icon;
¡¡¡¡
¡¡¡¡public class JBorderLabel extends JLabel {
¡¡¡¡
¡¡¡¡public JBorderLabel() {
¡¡¡¡super();
¡¡¡¡}
¡¡¡¡
¡¡¡¡public JBorderLabel(String text) {
¡¡¡¡super(text);
¡¡¡¡}
¡¡¡¡
¡¡¡¡public JBorderLabel(Icon image) {
¡¡¡¡super(image);
¡¡¡¡}
¡¡¡¡
¡¡¡¡public JBorderLabel(String text, Icon image, int horizontalAlignment) {
¡¡¡¡super(text, image, horizontalAlignment);
¡¡¡¡}
¡¡¡¡
¡¡¡¡public JBorderLabel(String text, int horizontalAlignment) {
¡¡¡¡super(text, horizontalAlignment);
¡¡¡¡}
¡¡¡¡
¡¡¡¡protected void paintComponent(Graphics g) {
¡¡¡¡super.paintComponent(g);
¡¡¡¡int height = this.getHeight();
¡¡¡¡int width = this.getWidth();
¡¡¡¡g.drawRect(0, 0, width - 1, height - 1);
¡¡¡¡}
¡¡¡¡}
²é¿´±¾ÎÄÀ´Ô´
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章