快速业务通道

从Java类库看设计模式(3) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
别实现HTML格式和ASCII 格式的报告。在Report层次下面,有具体的一个StockListReport子类,用来表示货物清单报 告。

public abstract class Report
{
    Reporter reporter;
    public Report(Reporter reporter) {
        this.reporter = reporter;
}
//抽象类使用桥接对象的方法来实现一个任务
    public void addReportItem(Object item){
        reporter.addLine(item.toString());
    }
    public void addReportItems(List items){
        Iterator iterator = items.iterator();
        while ( iterator.hasNext() )
        {
            reporter.addLine(iterator.next().toString());
        }
    }
    public String report(){
        return reporter.getReport();
    }
}
public class StockListReport extends Report{
    ArrayList stock=new ArrayList();
    public StockListReport(Reporter reporter){
        super(reporter);
    }
    public void addStockItem(StockItem stockItem){
        stock.add(stockItem);
        addReportItem(stockItem);
    }
}
//实现层次的抽象父类定义原子方法,供抽象层次的类调用
public abstract class Reporter{
    String header = "";
    String trailer = "";
    String report = "";
    public abstract void addLine(String line);
    public void setHeader(String header){
        this.header = header;
    }
    public void setTrailer(String trailer){
        this.trailer = trailer;
    }
    public String getReport(){
        return header+report+trailer;
    }
}
public class HTMLReporter extends Reporter{  
    public HTMLReporter(){
        setHeader("<HTML>\n<HEAD></HEAD>\n<BODY>\n");
        setTrailer("</BODY>\n</HTML>");
    }
    public void addLine(String line){
        report += line + "<BR>\n";
    }
}
public class ASCIIReporter extends Reporter{
    public void addLine(String line) {
        report += line + "\n";
    }
}

实际上,Bridge模式是一个很强大的模式,可以应用在很多方面。其基本思想:分离抽象 和实现,是设计模式的基础之一。正如GOF所提到的:"找到变化的部分,并将其封装起来"; "更多的考虑用对象组合机制,而不是用对象继承机制"。Bridge模式很好的体现了这几点。

从Java类库看设计模式(3)(3)

时间:2011-04-23 IBM 刘武东

Decorator模式

在使用Java中的IO类库的时候,是不是快要被它那些功能相似,却又绝对可称得上庞杂的 类搞得要发疯了?或许你很不明白为什么要做这么多功能相似的几十个类出来,这就是 Decorator模式将要告诉你的了。

在IO处理中,Java将数据抽象为流(Stream)。在IO库中,最基本的是InputStream和 OutputStream两个分别处理输出和输入的对象(为了叙述简便起见,这儿只涉及字节流,字 符流和其完全相似),但是在InputStream和OutputStream中之提供了最简单的流处理方法, 只能读入/写出字符,没有缓冲处理,无法处理文件,等等。它们只是提供了最纯粹的抽象, 最简单的功能。

如何来添加功能,以处理更为复杂的事情呢?你可能会想到用继承。不错,继承确实可以 解决问题,但是继承也带来更大的问题,它对每一个功能,都需要一个子类来实现。比如, 我先实现了三个子类,分别用来处理文件,缓冲,和读入/写出数据,但是,如果我需要一个 既能处理文件,又具有

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号