java装饰设计模式

将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model

改变一个方法:

1. 通过继承这个类,然后重写其中的方法

2. 通过对象的传递创建装饰对象,在装饰类中重新提供对应的方法
继承的缺点:

1. 单继承

2. 利用向上造型创建了一个父类对象,可以调用子类中重写方法,不能在使用父类中原来的方法

3. 如果父类对象已经存在,不能使用子类中重写之后的方法

装饰设计模式的缺点:

可能提高代码的冗余度---代理模式

 1 //人的接口
 2 public interface Person {
 3
 4     void eat();
 5
 6     void sleep();
 7
 8 }
 9
10
11 //明星的实现类
12 public class Star implements Person {
13
14     @SuppressWarnings("unused")
15     private Person p;
16
17     public Star(Person p) {
18         this.p = p;
19     }
20
21     @Override
22     public void eat() {
23         System.out.println("明星吃的是野菜~~~");
24     }
25
26     @Override
27     public void sleep() {
28         System.out.println("上床数星星~~~");
29     }
30
31 }
32
33 //工人实现类
34 public class Worker implements Person {
35
36     @Override
37     public void eat() {
38         System.out.println("工人吃一顿山珍海味~~~然后吃一个月的土~~~");
39     }
40
41     @Override
42     public void sleep() {
43         System.out.println("上床数星星~~~");
44     }
45
46 }
47
48 //将工人进行包装变成明星,但本质上工人还是工人
49 public class PersonDemo {
50
51     public static void main(String[] args) {
52
53         Worker p = new Worker();
54
55         p.eat();
56
57         Star s = new Star(p);
58
59         s.eat();
60
61         p.eat();
62
63     }
64
65 }
时间: 2024-10-01 04:34:46

java装饰设计模式的相关文章

java装饰设计模式的由来

装饰设计模式:基于已经存在的功能,提供增强的功能 装饰设计模式的由来: Reader   ----TextReader  ----MediaReader 要为子类提供缓冲读的功能 Reader   ----TextReader        ----BufferedTextReader   ----MediaReader       -----BufferedMediaReader Reader   ----TextReader        ----BufferedTextReader   -

java 装饰设计模式

今天讲下设计模式中的装饰设计模式,这个在我门的IO流已经使用到了,首先看下对装饰设计模式的定义 定义: 动态的给一个对象添加一些额外的功能,就新增功能来说,装饰模式比生成子类更加灵活. 总结起来装饰设计模式2个作用: 2个作用 1:为对象添加功能, 2:添加功能是动态的 装饰器模式具有如下的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. 它可以给被装饰对象添加额外的功能. 用一句话总结就是:保持接口,增强性能 现在用代码实现以下更为直观 比如手机只能打电话,那我现在想打电

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

Java软件设计模式------装饰设计模式

Java软件设计模式一共分为23种; 一般常用的有: 单例设计模式 装饰设计模式 工厂设计模式 装饰设计模式 定义:英文叫Decorator Pattern,又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 在生活中我们用程序员和项目经理的例子来比喻,项目经理是从程序员开始的,经过不断地积累工作经验.不断的学习新的知识,才有可能升职. 在装饰设计模式中项目经理就是程序员的增强. 程序猿: 写程序 项目

JAVA学习第四十九课 — IO流(三):缓冲区2 & 装饰设计模式

一.模拟BufferedReader 自定义MyBuffereaReader 对于缓冲区而言,里面其实就是封装一个数组,对外提供方法对数组的操作,这些方法最终操作的都是数组的角标 原理:从源中取出数据存入缓冲区,再从缓冲区不断的取出数据,取完后,继续从源中继续取数据,进缓冲区,直至源中的数据取完,用-1做为结束标记 import java.io.*; class MyBufferedReader { private FileReader fr; //定义数组作为缓冲区 private char[

Java Web总结二十Filter、装饰设计模式

一.Filter的部署--注册Filter <filter> <filter-name>testFitler</filter-name> <filter-class>org.test.TestFiter</filter-class> <init-param> <param-name>word_file</param-name> <param-value>/WEB-INF/word.txt</p

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

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

Java:装饰设计模式

装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能, 并提供加强功能,那么自定义的该类就称为装饰类. 装饰类通常通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的 功能. //例子1: class Person { public void chifan() { System.out.println("吃饭"); } } class SuperPerson { private Person p; public SuperPerso

java中的装饰设计模式,浅谈与继承之间的区别

最初接触装饰设计模式,一直搞不懂这么做的意义是什么,看了网上很多的资料,对于与继承的区别并没有很清楚的分析,直到看到这篇博客:http://www.cnblogs.com/rookieFly-tdiitd/p/4914593.html 这篇就很清楚的解释了装饰设计模式与继承之间的区别.下面是我自己的一些理解. 一.概念 装饰模式又称为包装模式,动态地给对象添加功能,是继承关系的一种替代方法. 二.选择 子类通过继承也能增加功能,但是关于装饰模式与继承之间如何选择,请看下面的例子. 假设:煎饼是父