装饰者模式

定义:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

代码:

接口(面对接口编程,以便动态绑定)

public interface Women {

	// 颜值
	void faceScore();
	
	// 气质
	void qualities();
}

原始类

/**
 * 定义原始对象
 * @author z_hh
 * @time 2018年7月22日
 */
public class Fengjie implements Women {

	@Override
	public void faceScore() {
		System.out.println("凤姐原来的颜值是0分!");

	}

	@Override
	public void qualities() {
		System.out.println("凤姐原来的气质是0分!");

	}

}

装饰者抽象类(作用:1、抽取共同的属性,在这里是Women引用;2、提供默认修饰,避免所有子装饰类必须实现接口,例如,这里的画眉毛装饰器,我只需要装饰颜值方法,只重写faceScore方法就可以了)

/**
 * 装饰抽象类
 * 作用:
 * 1、抽取共同属性
 * 2、提供默认修饰,避免每个子装饰类必须重写所有接口方法
 * @author z_hh
 * @time 2018年7月22日
 */
public abstract class MakeUpWomen implements Women {

	private Women women;
	
	public MakeUpWomen(Women women) {
		this.women = women;
	}

	@Override
	public void faceScore() {
		women.faceScore();
	}
	
	@Override
	public void qualities() {
		women.qualities();
	}
	
}

装饰者1(画眉毛,只重写faceScore方法)

/**
 * 画了眉毛
 * @author z_hh
 * @time 2018年7月22日
 */
public class PencilTheEyebrowsWomen extends MakeUpWomen {

	public PencilTheEyebrowsWomen(Women women) {
		super(women);
	}

	// 只装饰颜值方法
	@Override
	public void faceScore() {
		super.faceScore();
		System.out.println("因为画了眉毛,颜值提高50分!");
	}
	
}

装饰者2(涂唇膏,只重写qualities方法)

/**
 * 涂了唇膏
 * @author z_hh
 * @time 2018年7月22日
 */
public class LipstickWomen extends MakeUpWomen {

	public LipstickWomen(Women women) {
		super(women);
	}
	
	// 只装饰气质方法
	@Override
	public void qualities() {
		super.qualities();
		System.out.println("因为涂了唇膏,气质提高50分!");
	}

}

测试:

public class Test {

	public static void main(String[] args) {
		System.out.println("※※※原始的凤姐");
		Women fengjie = new Fengjie();
		fengjie.faceScore();
		fengjie.qualities();
		
		System.out.println("--------------完美分割线--------------");
		
		System.out.println("※※※画了眉毛的凤姐");
		Women huameimao = new PencilTheEyebrowsWomen(fengjie);
		huameimao.faceScore();
		huameimao.qualities();
		
		System.out.println("--------------完美分割线--------------");
		
		System.out.println("※※※涂了唇膏的凤姐");
		Women tuchungao = new LipstickWomen(fengjie);
		tuchungao.faceScore();
		tuchungao.qualities();
				
	}

}

结果:

※※※原始的凤姐
凤姐原来的颜值是0分!
凤姐原来的气质是0分!
--------------完美分割线--------------
※※※画了眉毛的凤姐
凤姐原来的颜值是0分!
因为画了眉毛,颜值提高50分!
凤姐原来的气质是0分!
--------------完美分割线--------------
※※※涂了唇膏的凤姐
凤姐原来的颜值是0分!
凤姐原来的气质是0分!
因为涂了唇膏,气质提高50分!

注意:JDK中典型的装饰者设计模式------>IO流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值