设计模式之装饰器模式

常见设计模式:
工厂模式,单例模式,装饰器模式,代理模式,适配器模式等
Java中IO使用的是装饰设计模式:
抽象构件:抽象被装饰者,一般是接口
具体构件:具体被装饰者,实现抽向构件
抽象角色:抽象装饰者, 抽象角色也去实现抽向构件:多态使用抽象构件做成员变量
重写接口方法
具体角色:具体修饰者继承抽象角色,重写父类方法
抽象构件:抽象被装饰者,一般是接口,接口目的是为了实现多态
/**
 * 抽象构件:抽象被装饰者
 */
public interface GuoDi {
	/**
	 * 获取锅底名字
	 * @return 
	 */
	String getName();
	/**
	 * 获取锅底价格
	 * @return
	 */
	
	int getPrice();
	
}
具体构件:具体被装饰者,实现抽向构件
/**
 *具体构件: 具体被装饰者
 *具体构件实现抽象构件
 *
 *清汤锅底
 */
public class QingSoup implements GuoDi {

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "清汤";
	}

	@Override
	public int getPrice() {
		// TODO Auto-generated method stub
		return 30;
	}
}
抽象角色:抽象装饰者

抽象角色也去实现抽向构件:多态使用抽象构件做成员变量,
这样就可以在对象中嵌套构件重写接口方法

/**
 * 抽象角色也去实现抽向构件
 * 抽象角色写成抽象类
 */
public abstract class Cai implements GuoDi {
	//使用抽象构件做成员变量
	private GuoDi guoDi;
	/**
	 * 添加有参构造
	 * @param guoDi
	 */
	public Cai(GuoDi guoDi) {
		super();
		this.guoDi = guoDi;
	}
	/*public Cai() {
		// TODO Auto-generated constructor stub
	}*/

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return guoDi.getName();
	}
	@Override
	public int getPrice() {
		// TODO Auto-generated method stub
		return guoDi.getPrice();
	}
}
具体角色:具体修饰者继承抽象角色,重写父类方法
public class WhiteCai extends Cai {
//具体角色构造器参数有抽象构件的引用,方便创建具体构件
//添加有参构造:为了嵌套
	public WhiteCai(GuoDi guoDi) {
		super(guoDi);
	}
	
	//重写父类方法
	
	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return super.getName() + ",白菜";
	}

	@Override
	public int getPrice() {
		// TODO Auto-generated method stub
		return super.getPrice() + 15;
	}
}
测试:
/**
 * 测试火锅
 *
 */
public class TestHotpot {
	public static void main(String[] args) {
		
		GuoDi guoDi = new WhiteCai(new QingSoup());
		
		System.out.println(guoDi.getName() + guoDi.getPrice());
		
	}
}

其他设计模式可以参考以下文章

设计模式之单例设计模式
设计模式之简单工厂和工厂方法
设计模式之静态代理和动态代理

本人开始学习Dubbo,会慢慢更新Dubbo系列文章

Dubbo第一篇-服务注册与发现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值