博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器模式
阅读量:4100 次
发布时间:2019-05-25

本文共 1908 字,大约阅读时间需要 6 分钟。

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

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

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)));

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

转载地址:http://fgeii.baihongyu.com/

你可能感兴趣的文章
人工神经网络——感知器介绍
查看>>
人工神经网络——反向传播算法(BackPropagation)
查看>>
进程的地址空间概述
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
Win32程序之进程的原理
查看>>
C++虚函数原理
查看>>
MySQL的索引
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
乔布斯18岁求职信拍卖价22.24万美元,值吗?
查看>>