装饰器模式

装饰器模式是什么?装饰器模式属于结构型模式中的一种,允许向一个现有对象添加新的功能,同时又不改变其结构,作为现有类的一个包装

举个实例吧,就像我们女朋友出门前,必须要化妆,这个过程就可以抽象成一个装饰器模式,要打底,要涂口红,要扑粉,要画眉……一大堆操作,但是你让女朋友只画眉毛,那她肯定不乐意了啊,这个时候就必须再添加修饰

interface Showable{
	public void show();//定义展现行为
}
class Girl implements Showable{
	@Override
	public void show() {
		// TODO 自动生成的方法存根
		System.out.print("女孩的素颜");
	}
}
class Decorator implements Showable{
	Showable showable;
	public Decorator(Showable showable) {//构造时注入素颜的女朋友
		this.showable = showable;
	}
	@Override
	public void show() {
		// TODO 自动生成的方法存根
		System.out.print("粉饰(");//化妆品粉饰
		showable.show();
		System.out.print(")");
	}//化妆品粉饰器
	
}
public class decoratorDemo {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//用装饰器包裹女孩show出来
		new Decorator(new Girl()).show();
	}
}
interface Showable{
	public void show();
}
class Girl implements Showable{
	public void show() {
		// TODO 自动生成的方法存根
		System.out.print("素颜女孩");
	}
}
abstract class Decorator implements Showable{
	protected Showable showable;
	public Decorator(Showable showable) {
		this.showable = showable;
	}
	@Override
	public void show() {
		// TODO 自动生成的方法存根
		showable.show();
	}
}
class FoundationMakeup extends Decorator{

	public FoundationMakeup(Showable showable) {
		super(showable);
		// TODO 自动生成的构造函数存根
	}
	@Override
	public void show() {
		System.out.print("打粉底(");
		showable.show();
		System.out.print(")");
	}
	
}
class Lipstick extends Decorator{

	public Lipstick(Decorator showable) {
		super(showable);
		// TODO 自动生成的构造函数存根
	}
	@Override
	public void show() {
		System.out.print("涂口红(");
		showable.show();
		System.out.print(")");
	}
}
public class DecoratorDemoUpdate {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//口红包裹粉底,再包裹女友
		Showable madeupGirl = new Lipstick(new FoundationMakeup(new Girl()));
		madeupGirl.show();
	}
}

学习装饰器模式,会发现有点像java IO包里的众多流处理类

new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));

但是,流处理类要比我们的例子复杂许多,但是基本思想和我们装饰器模式会有些相像,也有点想俄罗斯套娃一样,一层套一层的结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值