设计模式之:装饰设计模式

装饰设计模式

装饰设计模式概述

装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案。装饰模式可以任意组合。

优点

使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能

缺点

正因为可以随意组合,所以就可能出现一些不合理的逻辑

装饰设计模式图解:

例子1:

public
interface
Phone {

public
abstract void
call();

}

public
class
IPhone implementsPhone {

@Override

public
void
call() {

System.out.println("手机可以打电话了");

}

}

public
abstractclass
PhoneDecorate
implements
Phone {

private Phone
p;

public PhoneDecorate(Phone p){

this.p = p;

}

@Override

public
void
call() {

this.p.call();

}

}

public
class
MusicPhoneDecorate extends PhoneDecorate {

publicMusicPhoneDecorate(Phone p) {

super(p);

}

@Override

public
void
call() {

super.call();

System.out.println("手机可以听音乐");

}

}

public
class
RingPhoneDecorate extends PhoneDecorate {

public RingPhoneDecorate(Phonep) {

super(p);

}

@Override

public
void
call() {

System.out.println("手机可以听彩铃");

super.call();

}

}

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.Scanner;

public class PhoneDemo {

publicstatic void main(String[] args) {

Phonep = new IPhone();

p.call();

System.out.println("------------");

//需求:我想在接电话前,听彩铃

PhoneDecoratepd = new RingPhoneDecorate(p);

pd.call();

System.out.println("------------");

//需求:我想在接电话后,听音乐

pd= new MusicPhoneDecorate(p);

pd.call();

System.out.println("------------");

//需求:我要想手机在接前听彩铃,接后听音乐

//自己提供装饰类,在打电话前听彩铃,打电话后听音乐

pd= new RingPhoneDecorate(newMusicPhoneDecorate(p));

pd.call();

System.out.println("----------");

//想想我们在IO流中的使用

//InputStream is = System.in;

//InputStreamReader isr = new InputStreamReader(is);

//BufferedReader br = new BufferedReader(isr);

BufferedReaderbr = new BufferedReader(newInputStreamReader(System.in));

BufferedWriterbw = new BufferedWriter((new OutputStreamWriter(

System.out)));

Scannersc = new Scanner(System.in);

}

}

运行结果:

手机可以打电话了

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

手机可以听彩铃

手机可以打电话了

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

手机可以打电话了

手机可以听音乐

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

手机可以听彩铃

手机可以打电话了

手机可以听音乐

----------

时间: 2024-10-13 00:52:43

设计模式之:装饰设计模式的相关文章

java_设计模式_装饰设计模式

package IO; /* * 装饰设计模式 模拟咖啡 * 1.抽象组件:需要装饰的抽象对象(接口或抽象父类) * 2.具体组件:需要装饰的对象 * 3.抽像装饰类:包含了对抽象组件的引用以及装饰着共有的方法 * 4,具体装饰类:被装饰的对象 * */ public class Test2 { public static void main(String[] args) { Drink coffee=new Coffee(); System.out.println(coffee.info()+

使用装饰设计模式加密数据

使用装饰设计模式加密数据: package com.zs.JiaJiE09; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; /** * 使用装饰设计模式把数据取反进行加密解密 * Key方法为钥匙 * * @author LZG * */ public class JMOutputStream extends OutputStream{ /** * 更多资料欢迎浏

装饰设计模式

装饰设计模式概述 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类,是继承的替代方案 优点 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能 缺点 正因为可以随意组合,所以就可能出现一些不合理的逻辑 public class Test { public static void main(String[] args) throws Exception { Phone p = new IPhone(); p.cal

Java:装饰设计模式

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

java装饰设计模式的由来

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

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

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

设计模式 2 —— 装饰者模式

设计模式目录: 设计模式 1 ——观察者模式 设计模式 2 —— 装饰者模式

java装饰设计模式

将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个方法: 1. 通过继承这个类,然后重写其中的方法 2. 通过对象的传递创建装饰对象,在装饰类中重新提供对应的方法继承的缺点: 1. 单继承 2. 利用向上造型创建了一个父类对象,可以调用子类中重写方法,不能在使用父类中原来的方法 3. 如果父类对象已经存在,不能使用子类中重写之后的方法 装饰设计模式的缺点: 可能提高代码的冗余度-

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

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

装饰设计模式的简单理解

//装饰设计模式.//不修改原对象,对原有对象的功能进行增强.class Person{    void chifan()    {        System.out.println("吃饭");    }} class NewPerson{    private Person p;    NewPerson(Person p)    {        this.p = p;    }    public void newChifan()    {        System.out