装饰和继承的区别

子类用的技术都是一样的,那么有必要给他单独定一个子类吗?

这就是装饰模式生成的原因。

class MyBufferReader{

MyBufferedReader(被提高效率的类1 class){}

MyBufferedReader(被提高效率的类2 class){}

MyBufferedReader(被提高效率的类3 class){}

}

--------------------------------

优化后的代码A:

class MyBufferReader extends 父类{

private 父类 class;

MyBufferedReader(父类 class){}

//组合结构

}

---------------------------------

装饰模式,比继承要灵活;降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的对象是相同的,只不过提供了更强的功能。所以装饰类和被装饰类,通常都属于一个体系中。

-----------------------

装饰类,覆盖Reader类中的抽象方法

public void close(){

class.close();

}

public int read(char[] buf, int off, int len){

return r.read(buf, off, len);

}

---------------------------------

装饰和继承的区别

时间: 2024-10-11 11:04:22

装饰和继承的区别的相关文章

装饰设计模式,以及它与继承的区别

对一组对象进行功能的增强,就可以使用到这个模式. 装饰设计模式与继承的区别? 都可以对对象的功能进行扩展,但是如果是继承,那么就需要一个继承体系,如果该对象要提高效率,就会出现为了提高效率而进行的继承,这会导致整个体系越来越臃肿,不够灵活. 装饰设计模式比继承更加灵活,不需要产生继承关系. 装饰类与被装饰类要同属于一个接口或父类. 原文地址:https://www.cnblogs.com/olddriver123/p/8274956.html

代理模式与装饰器模式的区别

代理模式与装饰器模式的区别,主要大于,从使用者(客户端)的角度来看的: //装饰器的客户public class Client{ public static void main(String[] args){ //客户指定了装饰者需要装饰的是哪一个类 Component component = new Decorator(new ConcreteComponent()); - }}//代理的客户public class Client{ public static void main(String

接口、接口优点、接口的属性和方法特性、接口与继承的区别、接口与抽象类的区别、匿名实现类、JDK1.8新特性、打印类名称

接口里的属性,必须是公共的/默认的&静态的&Final&初始化后的属性: 接口里所有方法都是抽象的. 接口和继承---先天有的用继承,后天学习的用接口: 接口特性-------- 1.接口不可以被实例化: 2.实现类必须实现接口中所有方法,否则实现类必须是抽象类 3.实现类可以实现多个接口,来弥补Java不能多继承: 4.接口中的变量都是静态常量:(静态的-可以通过类的名字点-直接调用:) ----------------------------------------------

day10 Python作用域 Python2.7与Python3.x的类继承的区别及其他

一.Python作用域   1.Python中无块级作用域 if 1 == 1: name = 'test' print(name) #输出会报错,因为name的作用域仅限于if下的代码块,而不属于全局   2.Python中以函数为作用域 def func(): func_name = 'func_test' print(func_name) #这里同样会报错,因为变量func_name的作用于func函数中   3.Python作用域链,层层嵌套,使用时从内向外找   4.Python的作用

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

JAVA设计模式-装饰设计模式-继承体系的由来和装饰类的优化

首先看一下我们设计类的过程: 专门用于读取数据的类 MyReader l--MyTextReader:根据不同的功能会不断延伸很多子类 l--MyMeidaReader l--MyDataReader l--.......... 为了提高以上子类的工作效率,需要加入缓冲区技术.所以又会出现下面的类的继承体系. (体系1) MyReader l--MyTextReader:根据不同的功能会不断延伸很多子类 l--MyBufferedTextReader l--MyMeidaReader l--My

重写,重载,多态,继承的区别。

重写,重载,多态,继承的区别: 继承是子类继承父类的方法: 重写(override)是子类重写父类允许访问的方法.返回值和参数类型必须相同. 重载(overload)就是允许多个同名但是形参个数或者类型不同的函数方法存在于同一个类里.当类统一调用方式时由形参来决定调用具体的方法. 下面是转载的一篇文章: 继承是子类获得父类的成员,重写是继承后重新实现父类的方法.重载是在一个类里一系列参数不同名字相同的方法.多态则是为了避免在父类里大量重载引起代码臃肿且难于维护. 网上看到一个有趣的说法是:继承是

OOP三类继承的区别

OOP继承的区别提纲: 1. 普通类继承,并非一定要重写父类方法.2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法.如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法.3. 接口类继承.如果是一个子接口,可以扩展父接口的方法:如果是一个子抽象类,可以部分或全部实现父接口的方法:如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法. 1.抽象类继承 在定义类的前面加上关键字abstract,那么这个类就是抽象类了, 抽象类本身无法产生实例对象,而且抽象类包含了一个

Java 代理模式和装饰者模式的区别

装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案:代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用: 装饰模式应该为所装饰的对象增强功能:代理模式对代理的对象施加控制,并不提供对象本身的增强功能 二者的实现机制确实是一样的,可以看到他们的实例代码重复是很多的.但就语义上说,这两者的功能是相反的,模式的一个重要作用是简化其他程序员对你程序的理解, 你在一个地方写装饰,大家就知道这是在增加功能,你写代理,大家就知道是在限制, 虽然代码很可能相同,但如果你