Decorator设计模式的实现中 装饰设计模式学习笔记

装饰设计模式

a)当某个类的某个方法不适应当前业务的需要
思路:
》扩展父类的可供扩展的方法,可以使有,但不优
》装饰设计模式(推荐)

开发步骤:

1)写一个普通类或写一个普通类扩展[extends]一个父类
2)写一个需要被包装的实例变量
3)通过构造方式为被包装的实例变量赋值
4)对于不   满足需求的方法,重写父类的相关方法

5)对于满足需求的方法,直接调用被包装的对象 [可选]

java

package cn.xijie.decorator;

import java.io.BufferedReader;

/**使用Decorator设计模式为BufferedReader类的readLine方法添加行号的功能*/
//将BufferedReader进行必包的包装/装饰
public class MyBufferedReader {

    private BufferedReader br;
    private int no; //行号
    public MyBufferedReader(BufferedReader br){
        this.br = br;
    }
    //重写父对象的方法
    public String readLine() throws Exception{
        String line = null;
        line = br.readLine();
        if(line!=null){
            no++;
            line = no + ":" + line;
        }
        return line;
    }
    //直接使用父对象的方法
    public void close() throws Exception{
        br.close();
    } 

}

测试类:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import org.junit.Test;
import cn.xijie.decorator.MyBufferedReader;

public class DecoratorTest {

    //readLine方法添加行号的功能。

    @Test
    public void DecoratorTST() throws Exception {
        Reader r = new FileReader(new File("d:\\abc.txt"));
        BufferedReader br = new BufferedReader(r);
        MyBufferedReader mbr = new MyBufferedReader(br);
        String line = null;
        while ((line = mbr.readLine()) != null) {
            System.out.println(line);
        }
        mbr.close();
    }

}

原文地址:http://blog.51cto.com/357712148/2105490

时间: 2024-10-09 01:35:54

Decorator设计模式的实现中 装饰设计模式学习笔记的相关文章

CSS中filter滤镜学习笔记

1.CSS静态滤镜样式 (filter)(只有IE4.0以上支持)  CSS静态滤镜样式的使用方法:{ filter : filtername( parameters1, parameters2, ...) } Filter样式 简要说明 支持参数 alpha 设置图片或文字的不透明度 opacity.finishOpacity.style.startX.startY.finishX.finishY.add.direction.strength blur 在指定的方向和位置上产生动感模糊效果 a

XML From Action Script[AS中的XML学习笔记]

XML From Action Script XML 是 eXtensible Markup Language (可扩展标记语言)的缩写. E4X ECMAScript for XML 规范定义了一组用于处理 XML 数据的类和功能.这些类和功能统称为 E4X. ActionScript 3.0 包含 以下 E4X 类:XML. XMLList. QName 和 Namespace. E4X 包含了一些直观运算符(如点 (.) 和属性标识符 (@) 运算符),用于访问 XML 中的属性 (pro

《javascript 设计模式》 第15章 观察者模式 -- 学习笔记

定义: 在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式(又名发布者-订阅者 “publisher-subscriber" 模式) 是一种管理人与其任务之间的关系(确切的讲,是其对象及其行为和状态之间的关系 )的得力工具.用javascript的 话来说,这种模式的实质 就是你可以程序中某个对象的状态进行观察并且在其发生改变时能够得到通知. 观察者API: var Publisher=function(){ this.subscribers=[]; } //推送方法 Pub

python装饰器学习笔记

什么是python装饰器? 装饰器其实也就是一个函数,一个用来包装函数的函数,返回一个修改之后的函数对象,将其重新赋值原来的标识符,并永久丧失对原始函数对象的访问. eg:当需要在Func1和Func2中加一样的功能时,可以在outer中添加一次就可以完成全部函数的添加.装饰器与函数建立连接的方式是在函数的前一行用@+装饰器名称来完成.并且在装饰器中一定要返回被装饰的对象 def outer(fun):     def wrapper():         print '验证'         

深度学习在美团点评推荐平台排序中的应用--学习笔记

写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运用 原创 2017-07-28 潘晖 美团点评技术团队 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户

Android中的Telephony学习笔记(2)

上一篇文章中学习了android.provider中Telephony类. 这一篇文章学习android.telephony包中的类,这些类是android提供给上层调用的API. 为监測基本电话信息提供的一系列的API.比如网络类型,连接状态.操作电话号码的工具类. 一共25个类.以下逐一介绍: TelephonyManager 处理设备上的电话服务信息,应用能够使用这些方法检測电话的状态,处理用户的信息类型.也能够注冊一个监听器接受电话状态改变的通知.该类不能直接实例化,能够通过 Conte

jQuery中的Ajax学习笔记

前段时间学习了<锋利的jQuery第六章>jQuery与Ajax应用,现做如下笔记: 我们先来了解一下,什么是Ajax呢?Ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),它并不是指一种单一的技术,而是有机地利用了一系列交互式网页应用相关的技术所形成的结合体.简短地说,在不重载整个页面的情况下,Ajax通过后台加载数据,并在网页上进行显示. 我们来简要回顾一下Ajax.早在1998年,微软就引入了一个ActiveX控件,从而能

Kafka中文文档学习笔记

文档位置: /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/Kafka 据说是目前见到的最好的 Kafka 中文文章 . Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活劢流(activity stream) 和运营数据处理管道(pipeline)的基础. 返种由不可变(immutable)的活动数据组成的高吞吐量数据流代表了对计算能力的一种真正的挑战,因其数据量很容易就可能会比网站中位亍第二位的数据源的数据量

android中读取通讯录学习笔记

1.读取通讯录时一次读取时,尽量少读取所有属性,特别是列表展示的时候,会让你的列表加载速度变得难以忍受,建议先加载少量属性,然后在详情的时候加载所有属性. 2.在读取一类属性的时候,建议用一个游标,且放在循环外面,能明显加快速度,用projection(表示需要查询的列,在下面代码中是CONTACTOR_ION). 示例代码如下: private static final String[] CONTACTOR_ION = new String[]{ ContactsContract.Common