看java与模式中装饰器模式,没有看懂。。。
在网上找了一篇通俗易懂的,看完了回去再看遍java与模式,理解能更深点
装饰器模式:
decorator的结构如下:
MyInterface
|
_______|_______
| |
Myclass Decorator
____|_____
| |
DecoratorA DecoratorB
decorator的目的是在不改变任何原有的类的基础下,添加新的功能(你可以理解为书上说的灵活性)。其中Myclass是你要扩展的类,DecoratorA跟DecoratorB封装了你要扩展的功能,并保存有一个MyInterface的引用。
考虑以下代码:
public static void main(Strings[] arg){
myInterface a = new myClass();
a.print();
}
myInterface 是myClass的接口,只声明了一个方法print(),myClass实现了该方法:
public void print(){
System.out.println("hello");
}
那么假如我们要在不改变原来的myClass的基础上,变成输出“hello world!”,要怎么做呢?
当然我们可以考虑直接写个myClass的子类,helloClass之类,但是要是要求根据环境不同,输出"hello world!",my hello world","my Hello"之类的组合呢?
用继承的方式将不得不写一堆类似的子类来。
decorator,装饰模式的解决方法是,只实现基本的功能,把附加的功能抽出来放一边。
例如以下代码:
class DecoratorA implements Decorator{
MyInterface myObject;
DecoratorA(myInterface myObject){
this.myObject = myObject;
}
public void print(){
myObject.print();
System.out.print("world!");
}
}
class DecoratorB implements Decorator{
MyInterface myObject;
DecoratorA(myInterface myObject){
this.myObject = myObject;
}
public void print(){
System.out.print("my");
myObject.print();
}
}
DecoratorA和DecoratorB的功能分别是打印出world跟my。这时main函数要打印出my hello world可简单变为:
public static void main(Strings[] arg){
MyInterface a =new DecoratorA(new DecoratorB(new MyClass());
a.print();
}
简单吧?简单的说,就是:
print(){
print("xxx");//可替换成你要添加的任何处理;
myObject.print();//调用基础类的函数;
xxxx; //后续处理
}
Decorator的介绍就到此为止,接下来讲java.io.
看到
MyInterface a =new DecoratorA(new DecoratorB(new MyClass());
分享到:
相关推荐
1、Decorator 自定义边框 2、Adorner调整控件大小和位置
奇幻RPG(物品锻造 与 Decorator模式)本文中,我们通过一个常见的给武器(对象)添加宝石(额外的状态和行为)的例子,讨论了Decorator设计模式的实现过程。
windows系统下的python超时装饰器,解决pypi中timeout-decorator库在windows系统上不可用的问题。
decorator-4.2.1-py2.py3-none-any.whl
decorator-wechat,微信现代化(Nevolution decorator).zip
decorator-4.1.2.tar.gz是支持ipython的依赖包。。。。
软件介绍: 这个decorator python是网友分享过来的一个模块文件,既然下载肯定会知道它的用途。
mybatis3+springmvc4+angularjs+mysql+decorator实例 +代码生成器 学习讨论使用
学习java 装饰模式(decorator)非常好的例子
资源来自pypi官网。 资源全名:decorator-4.0.11-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:protocol_implements_decorator-0.3.1.tar.gz
sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ) sequelize装饰器和 sequelize ( v3,v4,v5 )的一些其他特性。模型定义@Table API@Column API使用情况配置文件模型路径解析模型关联插件On
angularjs-logDecorator, 使用AngularJS的decorator来增强和增强 $log AngularJS LogXLogX为AngularJS的$log 实用程序提供扩展版本,以提供类似于以下内容的日志输出: 最初发布为一组必须手动克隆并集成到每个项目...
资源分类:Python库 所属语言:Python 资源全名:drf_nested_decorator-0.3-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
前端开源库-pure-render-decorator纯渲染装饰,使反应组件纯。
Decorator-3.4.0.tar.gz, a python package
vue脚手架 本框架已开发了所属相关组件,如有 定制组件 需求可联系
博文链接:https://your.iteye.com/blog/133420
*Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。
23种设计模式之八(结构型模式)Decorator模式