当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪桥接模式(Bridge Pattern)          从类的实现中分离出抽象或者接口类,以便于这两个类能够互不相干,这种模式称作桥接模式。这种类型模式属于结构设计模式之一, 它通过提供了一个桥结构来分离具体的实现类.........
    ▪时间线展示工具Timeline      时间线展示工具Timeline[1],可以实现网页上展示一个时间轴。在时间相关的数据展示中,有比较好的效果。测试了下,具体的用法是这样的。 1.编写html页面,引入JS脚本,引入JSON数据,设定待.........
    ▪设计模式 - 模板模式      UML 使用场合 如果你做了一段时间的面向对象编程,并且写过类继承的代码,那么你百分之八十写过模板的设计模式,只是写的时候不知道这个简单的写法竟然是一个设计模式。有没有曾经.........

[1]桥接模式(Bridge Pattern)
    来源: 互联网  发布时间: 2013-11-19

    从类的实现中分离出抽象或者接口类,以便于这两个类能够互不相干,这种模式称作桥接模式。这种类型模式属于结构设计模式之一, 它通过提供了一个桥结构来分离具体的实现类和抽象类。

    适用场合和优势:

  •  想永久地分离抽象和实现类。
  •  在多个对象中分享一个具体的实现类。
  •  想去提高可扩展性。
  •  从客户端哪里隐藏具体的实现。
  •      具体分析一个简单的实例,看看它是如何实现桥接模式。
         我们有一个接口DrawAPI, 桥接模式的实现类和它的之类RedCircle, GreenCircle。Shape是一个抽象类,适用了DreawAPI类的实例对象。BridgePatternDemo作为测试类,测试有关内容。UML类如下:


          drawAPI接口类。
    public interface DrawAPI {
        public void drawCircle(int radius, int x, int y);
    }

         它的子类RedCircle、GreedCircle。
    public class RedCircle implements DrawAPI {
        @Override
        public void drawCircle(int radius, int x, int y) {
            System.out.println("Drawing Circle[ color: red, radius: "
                                  + radius +", x: " +x+", "+ y +"]");
        }
    }

        
    public class GreenCircle implements DrawAPI {
        @Override
        public void drawCircle(int radius, int x, int y) {
            System.out.println("Drawing Circle[ color: green, radius: "
                    + radius +", x: " +x+", "+ y +"]");
        }
    }
           
          定义一个抽象类Shape。
    public abstract class Shape {
        protected DrawAPI drawAPI;
        protected Shape(DrawAPI drawAPI){
            this.drawAPI = drawAPI;
        }
        public abstract void draw();
    }

         抽象类的子类.
    public class Circle extends Shape {
        private int x, y, radius;
    
        public Circle(int x, int y, int radius, DrawAPI drawAPI) {
            super(drawAPI);
            this.x = x;
            this.y = y;
            this.radius = radius;
        }
    
        public void draw() {
            drawAPI.drawCircle(radius,x,y);
        }
    }

         测试代码如下:
    public class BridgePatternDemo {
        public static void main(String[] args) {
            Shape redCircle = new Circle(100,100, 10, new RedCircle());
            Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
    
            redCircle.draw();
            greenCircle.draw();
        }
    }
    

        测试结果:
    Drawing Circle[ color: red, radius: 10, x: 100, 100]
    Drawing Circle[ color: green, radius: 10, x: 100, 100]


    作者:GreatElite 发表于2013-5-15 13:06:55 原文链接
    阅读:87 评论:0 查看评论

        
    [2]时间线展示工具Timeline
        来源: 互联网  发布时间: 2013-11-19

    时间线展示工具Timeline[1],可以实现网页上展示一个时间轴。在时间相关的数据展示中,有比较好的效果。测试了下,具体的用法是这样的。

    1.编写html页面,引入JS脚本,引入JSON数据,设定待显示日历位置

    <scriptsrc=/blog_article/"http_/static.simile.mit.edu/timeline/api-2.3.0/timeline-api.js>

    <scriptsrc=/blog_article/"local_data2.js" type="text/javascript"></script>

    <divid='tl'></div>

    2.编写加载函数,并在网页中调用该函数

    <script>       

            var tl;

            function onLoad() {

                var tl_el =document.getElementById("tl");

                var eventSource1 = newTimeline.DefaultEventSource();

               

                var theme1 =Timeline.ClassicTheme.create();

                theme1.autoWidth = true; // Set theTimeline's "width" automatically.

                                         // SetautoWidth on the Timeline's first band's theme,

                                         // willaffect all bands.

                theme1.timeline_start = newDate(Date.UTC(1980, 0, 1));

                theme1.timeline_stop  = new Date(Date.UTC(2150, 0, 1));

               

                var d =Timeline.DateTime.parseGregorianDateTime("1980")

                var bandInfos = [

                    Timeline.createBandInfo({

                        width:          45, // set to a minimum, autoWidthwill then adjust

                        intervalUnit:   Timeline.DateTime.DECADE,

                        intervalPixels: 200,

                        eventSource:    eventSource1,

                        date:           d,

                        theme:          theme1,

                        layout:         'original'  // original, overview, detailed

                    })

                ];

                                                               

                // create the Timeline

                tl = Timeline.create(tl_el,bandInfos, Timeline.HORIZONTAL);

               

                var url = '.'; // The base url forimage, icon and background image

                               // references in thedata

               eventSource1.loadJSON(timeline_data, url); // The data was stored intothe

                                                          // timeline_data variable.

                tl.layout(); // display theTimeline

            }

           

            var resizeTimerID = null;

            function onResize() {

                if (resizeTimerID == null) {

                    resizeTimerID =window.setTimeout(function() {

                        resizeTimerID = null;

                        tl.layout();

                    }, 500);

                }

            }

       </script>

    调用该函数:<body onload="onLoad();"onresize="onResize();">

    3.编写包含事件的JSON文件

    vartimeline_data = {  // save as a globalvariable

    'dateTimeFormat':'iso8601',

    'wikiURL':"http://simile.mit.edu/shelf/",

    'wikiSection':"Simile Cubism Timeline",

     

    'events' : [

             {'start': '1987',

            'title': 'Birthday of gongqingkui',

            'description': 'This is description',

            'image':'http://portrait7.sinaimg.cn/1150968582/blog/180',

            'link':'http://blog.sina.com.cn/gongqingkui',

             'icon' :"dark-red-circle.png",       

            'color' : 'red',

            'textColor' : 'green'

            },

             {'start':'1986',

             'end':'1990',

             'isDuration':true,

             'title':'aaa',

             //'tapeImage': 'blue_stripes.png',

            'tapeRepeat': 'repeat-x',

            'caption': "This is the event'scaption attribute.",

            'classname': 'hot_event'         

             },

    ]

    }

    该JSON数据目前包括一个点事件和一个段时间。

    4.加载效果

    这是最简单的使用方法,一些详细的例子在这里http://simile-widgets.org/timeline/examples/index.html。与这个相似的一个应用timeplot[2]可以画时间相关的数据直方图,效果如下。

     

    参考

    1.Timeline项目主页http://simile-widgets.org/timeline/

    2.Timeplot项目主页http://simile-widgets.org/timeplot/

    作者:gongqingkui 发表于2013-5-15 14:43:54 原文链接
    阅读:65 评论:0 查看评论

        
    [3]设计模式 - 模板模式
        来源: 互联网  发布时间: 2013-11-19
    UML



    使用场合

    如果你做了一段时间的面向对象编程,并且写过类继承的代码,那么你百分之八十写过模板的设计模式,只是写的时候不知道这个简单的写法竟然是一个设计模式。有没有曾经写过类似这样的继承结构,定义了一个基类,它有一些virtual函数又有一些nonevirtual函数,继承类肯定要对virtual函数进行重写,当然对nonevirtual函数不能重写,这就是模板模式。

    模板模式是将一些固定的流程或者业务在基类中定义好(以nonevirtual存在,因为继承类也要使用这些方法),不固定的在继承类中去实现(当然这些是virtual方法),这样就达到了最大限度的重用代码,但是还有更重要的作用:

    1. 基类定义好了业务流程,这个业务流程就是nonevirtual函数进行支撑的,因为nonevirtual函数的业务逻辑无法修改,继承类只需要根据自己的独特性质实现virtual函数;


    作者:Gykimo 发表于2013-5-15 21:58:56 原文链接
    阅读:0 评论:0 查看评论

        
    最新技术文章:
    ▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
    ▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
    ▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
    ▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
    ▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
    ▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
    ▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
    ▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
    ▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
    ▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
    ▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
    ▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
    ▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
    ▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
    ▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
    ▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
    ▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
    ▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
    ▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
    ▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
    ▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
    ▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
    ▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
    ▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
    ▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
    ▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
    ▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
    ▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
    ▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
    ▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3