设计模式:装饰模式(decorate)】的更多相关文章

一.装饰模式 动态地给一个对象添加额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能. 二.UML图 1.Component(概念中提到的对象接口),也就是"被装饰者".2.ConcreateComponent(未添加任何职责的,对象接口的子类).3.Decorator(装饰者抽象类),扩张了对象接口的功能.4.ConcreteDrcorator(具体装饰类),具体怎么装饰对象接口的在这些类里面反映. 三.例子 比如有一个手机,允许…
设计模式 装饰模式(Decorator) @author ixenos 装饰模式是什么 1.装饰模式以对客户端透明的方式对象的功能,是继承关系的一个替代方案,但装饰模式可以在不创造更多子类的情况下,对对象的功能进行扩展. 2.装饰模式以对客户端透明的方式动态地给一个对象附上更多的责任.换言之,客户端并不会觉得对象在装饰前后有什么不同. 3.装饰模式把对客户端的调用委派到被装饰类,而功能的增强在装饰类进行,装饰模式的关键在于这种扩展是完全透明的. 例如IO中的过滤流,具体就是BufferedInp…
前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会使用:现在该怎么办呢? 将这些非核心的操作全部放到类中,这样,一个类就包含了很多核心的操作和一些看似有关,但是又无关的操作:这就会使核心类发生“爆炸”的现象,从而使核心类失去了一定的价值,也使使用核心类的客户在核心操作和非核心操作中挣扎: 使用继承来扩展核心类,需要使用核心类时,直接建立核心类对象:当需要使用核心类扩展类时,就…
模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机. 关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator). 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和…
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同.装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展. 装饰模式的类图如下:…
前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会使用:现在该怎么办呢? 将这些非核心的操作全部放到类中,这样,一个类就包含了很多核心的操作和一些看似有关,但是又无关的操作:这就会使核心类发生“爆炸”的现象,从而使核心类失去了一定的价值,也使使用核心类的客户在核心操作和非核心操作中挣扎: 使用继承来扩展核心类,需要使用核心类时,直接建立核心类对象:当需要使用核心类扩展类时,就…
这是Bwar在2009年写的设计模式C++实现,代码均可编译可运行,一直存在自己的电脑里,曾经在团队技术分享中分享过,现搬到线上来. 1. 装饰模式简述 1.1 目的 动态地给一个对象添加一些额外的职责. 1.2 适用性 (1)  在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. (2)  处理那些可以取消的职责. (3)  不能或不好采用生成子类的方法扩充职责. 2. 装饰模式结构图 Component:定义一个对象接口,可以给这些对象动态地添加职责. ConcreteComp…
书上,真的用一个人穿衣打拌来讲解装饰模式的呢. from abc import ABCMeta, abstractmethod class Person(metaclass=ABCMeta): def __init__(self, name): self._name = name @abstractmethod def wear(self): print("着装...") class Engine(Person): def __init__(self, name, skill): su…
一.模式解析 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的要点主要是: 1.需要对已有对象扩展新的功能,又不希望改变原有对象接口: 2.装饰者对象与原有对象需要继承相同接口,初始化装饰对象时将原有对象传入装饰对象: 3.可以对一个对象定义多个装饰着对象,进行分别装饰或者组合装饰…
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void…
装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象.在设计原则中,有一条,多用组合,少用继承,装饰模式正是这一原则的体现. UML示意图: 假设自行车商店有4种自行车卖: var ABicycle = function(){ ... }; var BBicycle = function(){ ... }; var CBicycle = function(){ ... }; var DBicycle = function(){…
假如我们需要开发一个程序来展示一个人穿衣服的过程. #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class Person(): def __init__(self,name): print '%s开始穿衣'%name def wear_tshirt(self): print '穿TShirst' def wear_trouser(self): print '穿裤子' def wear_shoe(self): print '穿T鞋子' def…
装饰模式在中国使用的那实在是多,中国的文化是中庸文化,说话或做事情都不能太直接,需要有技巧的,比如说话吧,你要批评一个人,你不能一上来就说你这个做的不对,那个做的不对,你要先肯定他的成绩,表扬一下优点,然后再指出瑕疵,指出错误的地方,最后再来个激励,你修改了这些缺点后有那些好处,比如你能带更多的小兵,当个小头目等等,否则你一上来就是一顿批评,你瞅瞅看,肯定是不服气,顶撞甚至是直接“此处不养爷,自有养爷处”开溜哇.这是说话,那做事情也有很多,在山寨产品流行之前,假货很是比较盛行的,我在 2002…
定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构:(书中图,侵删) 一个被装饰接口类:从具体类中抽象出来,拥有用于修饰的一个公共方法 若干被装饰具体类:继承于被装饰接口类 一个抽象装饰类:继承于被装饰接口类 若干具体装饰类:具体的装饰方法   装饰模式是为了扩展原有方法(即已经存在的方法)的功能 ,所以是为了给方法添加功能,而不是给类新增方法.(我一开始就这么误解了,导致整个看下来感觉怪怪的,后面才后知…
装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活…
装饰模式C++实现 1定义 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活.可作为继承的替代 2类图 3实现 //构件 class Component { protected: Component(); public:  virtual void operate() = 0; virtual ~Component() = 0; }; class ConcreteComponent: public Component { public: ConcreteCompon…
老婆有一件蓝色的裙子和一件粉色的裙子, 不管怎么穿,她还是原来的老婆. 但是在软件里就不一定了, 如果把老婆比作一个class的话, 有一种做法是会因为增加了两个新的Property而继承出两个子类: "穿裙子的老婆, 穿粉色上衣的老婆". 你这样弄出两个子类也没什么不对, 问题是当MM的有上百件服装的时候,就会产生上百个子类,这个不好,将来万一父类一变化,下面上百个子类都要一个个地去修改,太乱了. 有一个更合理的方式来解决这个"老婆的装饰问题".我们的要求是:  …
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图: 模型类: Component类: package com.cnblog.clarck; /** * 接口对象,可以动态的给对象添加职责 * * @author clarck * */ public abstract class Component { public abstract void Operation(); } ConcreateComponent类: package com.cnb…
装饰模式是一种比较常见的模式. 定义为:动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 装饰模式的通用类图如下: 装饰模式的构成: 1) 抽象构件(Component):是一个接口或者是抽象类,就是定义我们最核心的对象,也就是原始的对象. ******在装饰模式中必须有一个最基本,最核心,最原始的接口或者抽象类来充当Component抽象构件****** 2) 具体构件(ConcreteComponent):是最核心,最原始,最基本的接口或者抽象类的实现,你要装…
概念 "用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能" "动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活" 何时用 需要扩展一个类的功能,或给一个类增加附加责任 需要动态的给一个对象增加功能,且可以动态地撤销它 需要增加一些基本功能的排列组合而产生的大量的功能,而使得继承变得非常困难的时候 实现构件 抽象构件(Component) 表示"被"装饰的本体的抽象定义,这个定义通常是一个接口(Interf…
转载自:http://blog.csdn.net/xu__cg/article/details/53024490 抽象构件 public interface CarInterface { void move(); } 具体构建 public class Car implements CarInterface { public void move() { System.out.println("路上行驶"); } } 装饰角色 public class SuperCar implemen…
装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 下面是一个给人穿衣服的过程,使用装饰模式: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——装饰模式 装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 特…
01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作为成员变量). 它必须拥有与被装饰对象相同的接口(多态调用.扩展需要). 它可以给被装饰对象添加额外的功能. 总结:保持接口,动态增强性能. 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种.与对象的适配器模式异同: 相同点:都拥有一个目标对象. 不…
➠更多技术干货请戳:听云博客 序列化 什么是序列化 序列化:保存对象的状态 反序列化:读取保存对象的状态 序列化和序列化是Java提供的一种保存恢复对象状态的机制 序列化有什么用 将数据保存到文件或数据库中时 将数据通过套接字在网络上传输时 通过 RPC RMI等传输对象时 如何序列化 实现Serializable接口 实现Externalizable接口 serialVersionUID的作用serialVersionUID建议给一个确定的值,不要由系统自动生成,否则在增减字段(不能修改字段类…
该系列主要总结了使用C++来实现各种设计模式,并结合实际的案例来分析如何使用,以及在什么场合下使用设计模式.以下是该系列所有文章的链接.希望对大家有帮助. C++设计模式——简单工厂模式 C++设计模式——工厂方法模式 C++设计模式——抽象工厂模式 C++设计模式——单例模式 C++设计模式——建造者模式 C++设计模式——原型模式 C++设计模式——适配器模式 C++设计模式——桥接模式 C++设计模式——组合模式 C++设计模式——装饰模式 C++设计模式——外观模式 C++设计模式——享…
C++设计模式——装饰模式 前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会使用:现在该怎么办呢? 将这些非核心的操作全部放到类中,这样,一个类就包含了很多核心的操作和一些看似有关,但是又无关的操作:这就会使核心类发生“爆炸”的现象,从而使核心类失去了一定的价值,也使使用核心类的客户在核心操作和非核心操作中挣扎: 使用继承来扩展核心类,需要使用核心类时,直接建立核心类对象:…
JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用性.有用性.可用性: 三个分类: 创建型设计模式 构造器模式(Constructor).工厂模式(Factory).抽象工厂模式(Abstract). 原型模式(Prototype).单例模式(Singleton).建造者模式(Builder) 结构设计模式 装饰模式.外观模式.适配器模式.代理模式 行为设计…
概论 java的io包下大概有85个类,真复杂.其实不然这些类又可以分为以下四个部分. 输入流                输出流 字节流         InputStream          OutputStream 字符流          Reader               Writer   简单来说,这四部分的对应都是很整齐的,有FileInputStream就有FileOutputStream,有BufferedReader就有BufferedWriter. 为了简便我们就…
1.复合模式:三层架构.MVC.MVP.MVVM 2.设计模式-单例模式 配置类的使用. 3.设计模式-模板方法 通过抽象类或接口提前定义要实现的方法. 4.设计模式-观察者模式 消息的通知. 5.设计模式-装饰模式:处于安全目的,保护被访问者 对一个已有的接口进行功能扩展. 如,继承父类,并增加扩展新的方法. 6.设计模式-策略模式 MVC中: 控制器是视图的策略. 视图只关心系统中可视的部分,对于任何界面行为,都委托给控制器处理. 控制器负责和模型交互来传递用户请求,对于工作是怎么完成的,视…
如java.io.LineNumberInputStream(deprecated),是装饰模式(decorate)的实现: 如java.io.OutputStreamWriter,是适配器模式(adapter)的实现: 引用知乎海纳老师的说法,这样看java.io包中的类的名称就能大概知道使用方法了: Adaptor所要解决的问题是适配,它的目的在于接口的转换. 而Proxy恰恰相反,它的目的在于保持接口不变,而改变接口定义的方法的行为. 代理的示意图: 海纳老师课程学习: 1.“我们能不使用…