装饰器模式

装饰器模式

意图:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比生成子类更加灵活;

动机:我们希望给某个对象添加而不是整个类添加一些功能;

下面看个例子:

package com.google;
/*
* 创建一个对象的抽象也就是接口
*/
public interface Basket {
public void show();
}

2.被装饰的对象,也就是对接口的一个实现,注意可以有多个实现:

package com.google;

/**
*身份:被装饰的对象
*一个对接口的实现,这个对象表示要我们将来要修饰的篮子里装内容,如果想修饰篮子的造型,还可以创建其他类实现Basket的接口,比如Shape
* 不理解的话可以查看java语言的接口抽象机制
*/
public class Original implements Basket{
public void show(){
System.out.println("The original Basket contains");
}
}

3.下面是三个装饰器的实现:

package com.google;
/**
*身份:装饰器
*为原来的类添加新的功能
*/
public class AppleDecorator implements Basket{
private Basket basket;
public AppleDecorator( Basket basket){
super();
this.basket = basket;
}

public void show(){
basket.show();
System.out.println("An Apple");
}
}

package com.google;

/**
*身份:装饰器
*/
public class BananaDecorator implements Basket{
private Basket basket;
public BananaDecorator(Basket basket){
super();
this.basket = basket;
}

public void show(){
basket.show();
System.out.println("A Banana");
}
}

package com.google;

/**
*身份:装饰器
*/
public class OrangeDecorator implements Basket{
private Basket basket;
public OrangeDecorator(Basket basket){
super();
this.basket = basket;
}

public void show(){
basket.show();
System.out.println("An Oranage");
}
}

4.实现的效果,我们三个修饰器全部用到,装满了篮子,当然也可以只装一个苹果或香蕉

/*
* 设计模式:装饰器模式
* java 简单的演示
*/
package com.google;

import uni.pattern.decorator.Original;
import uni.pattern.decorator.*;

public class DecoratorPattern {
public static void main(String[] args) {
Basket basket = new Original();
//一个装饰的过程
Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket)));
myBasket.show();
}
}

运行结果:

run:
The original Basket contains
An Oranage
A Banana
an Apple

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值