decorator设计模式的实现中装饰设计模式学习笔记(代码片段)

author author     2022-11-04     751

关键词:

装饰设计模式

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();
    


php中装饰器的完整继承行为

...【发布时间】:2013-08-0911:08:47【问题描述】:我不太习惯设计模式,也从未使用过装饰器。我想要一个可以根据上下文具有不同行为的对象。这些行为在不同的类中定义。我猜装饰器可以解决问题。但我需要每个装饰器都可以访... 查看详情

关于java中装饰者模式的详解,不理解啊,,谁给解释解释。。。

...   可以直接包含这个类的对象,如果这个类有实现某些接口,刚好某个需要添加额外智能的方法正好是其 查看详情

如何在 Ninject 中装饰实现特定接口的所有绑定

】如何在Ninject中装饰实现特定接口的所有绑定【英文标题】:HowcanIdecorateallmybindingsimplementingaspecificinterfaceinNinject【发布时间】:2015-03-0805:03:39【问题描述】:我正在使用JimmyBogard的Mediatr并尝试使用管道示例here我的问题是,虽然... 查看详情

关于mobx中装饰器语法的环境配置

1.弹出项目配置npmruneject此处注意,若弹出项目配置失败,请先执行以下两行代码1.gitadd.2.gitcommit-m"init"  2.安装装饰器所需依赖npminstall--save-devbabel-plugin-transform-decorators-legacy  3.安装应用配置npminstall@babel/plugin-proposal-decorators&n 查看详情

flask-restful中装饰器的使用

参考技术AFlask-Restful的创建实例方法在这里定义的decorators是应用于所有的Resource的APIFlask-RESTful在扩展Flask-RESTful的使用提到这种使用场景。Flask-RESTful的装饰器可以用于许多场景,比如用户验证的场景或某些API需要特殊权限验证的... 查看详情

python3中装饰器@typing.overload的使用(代码片段)

   typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py。此模块为类型提示(TypeHints)提供运行时支持。这里介绍下@typing.overload的使用,从python3.5版本开始将Typing作为标准库引入。   python3中增加了FunctionAnno... 查看详情

python3中装饰器介绍(代码片段)

   Python中的装饰器(decorator)是一个接受另一个函数作为参数的函数。装饰器通常会修改或增强它接受的函数并返回修改后的函数。这意味着当你调用一个装饰函数时,你会得到一个与基本定义相比可能有一些额外特性的函... 查看详情

装饰模式

...gSystem.Text;/*装饰模式**定义接口或类(类或抽象类)*分类实现*如多种对象类A或B*使用继承实现B类多样代处理和自己的处理**调用*定义A类定义B类*把A类代入B类调用B类为A装饰*再把装饰好的B类代入后面的B1类中装饰***/namespaceApp_ 查看详情

如何在类中装饰方法?

】如何在类中装饰方法?【英文标题】:Howtodecorateamethodinsideaclass?【发布时间】:2010-11-2422:45:29【问题描述】:我试图在一个类中装饰一个方法,但是python抛出一个错误。我的班级是这样的:frompageutilsimportformatHeaderclassmyPage(objec... 查看详情

装饰器模式

...的接口,规定这个被装饰组件都有哪些功能.ConcreteComponent:实现抽象组件对的所有功能Decorator:装饰器角色,它持有一个Component实例对象的引用,定义一个与抽象组件一致的接口ConreteDecorator:具体的装饰器实现类,负责实现装饰器角色定... 查看详情

在类中装饰 @property.setter 装饰器 [重复]

】在类中装饰@property.setter装饰器[重复]【英文标题】:Decoratea@property.setterdecoratorinsideaclass[duplicate]【发布时间】:2019-09-0122:27:22【问题描述】:我找不到在Python类中装饰@property.setter装饰器的正确方法。为了避免复制粘贴代码,... 查看详情

TypeScript 中装饰类的扩展类型

】TypeScript中装饰类的扩展类型【英文标题】:ExtendedTypingsonDecoratedClassinTypeScript【发布时间】:2018-05-0809:33:56【问题描述】:这是TypeScript文档中有关装饰器的一些代码:functionclassDecorator<Textendsnew(...args:any[]):>(constructor:T)return... 查看详情

装饰器实现单例模式

...turn returnwrap不难发现,test其实就是wrap,我们可以在wrap中实现test的逻辑,并添加一些我们想要附加的特性,这样,相当于将test包装了一下,也就是‘装饰’了一下由于类也可以被装饰,我们以单例模式的实现为例能想到的办法... 查看详情

在 SwiftUI 中装饰文本片段的最佳方法是啥?

】在SwiftUI中装饰文本片段的最佳方法是啥?【英文标题】:WhatisthebestwaytodecoratefragmentsoftextinSwiftUI?在SwiftUI中装饰文本片段的最佳方法是什么?【发布时间】:2020-02-1018:47:11【问题描述】:我需要在SwiftUI中将自定义视图插入到Tex... 查看详情

在 MRO 中装饰顶部功能

】在MRO中装饰顶部功能【英文标题】:DecoratingtopfunctioninMRO【发布时间】:2021-05-0303:23:43【问题描述】:如何修饰类继承中的最后一个函数?如果我装饰一个超类函数,子类函数会覆盖装饰器。我想知道是否有一种巧妙的方法可... 查看详情

是否可以在 Typescript 中装饰装饰器?

】是否可以在Typescript中装饰装饰器?【英文标题】:IsitpossibletodecorateadecoratorinTypescript?【发布时间】:2016-09-1113:53:40【问题描述】:构建一个组件库,@Component装饰器中有相当多的样板。例如样式和模板url总是相同的相对路径。... 查看详情

九:decorator设计模式(代码片段)

二、使用Decorator设计模式增强request对象  ServletAPI中提供了一个request对象的Decorator设计模式的默认实现类HttpServletRequestWrapper,HttpServletRequestWrapper类实现了request接口中的所有方法,但这些方法的内部实现都是仅仅调用了一下所... 查看详情

c++设计模式学习笔记:decorator装饰模式

目录简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识... 查看详情