九大常用设计模式学习-装饰者模式

本文通过一个游戏人物装备穿戴的例子,深入浅出地介绍了装饰者模式的实现与应用。装饰者模式允许在不改变原有对象的基础上,动态地为其添加新的功能,提供了一种比继承更加灵活的替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式学习记录:一句话+代码体会设计模式。

九大常用设计模式

单例模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87903569

简单工厂/静态工厂方法模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931684

工厂方法模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931610

代理模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931864

模板方法模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931912

观察者模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931995

适配器模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931940

装饰者模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931800

策略模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87932047

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

一个给游戏人物穿戴装备例子体会装饰者模式。

装饰组件 

/**
 * 装饰组件
 */
public interface AbstractComponent {
	String descirbe();
}

具体目标类 

/**
 * 具体的目标类
 */
public class Warrior implements AbstractComponent {

	@Override
	public String descirbe() {
		return " 战士 ";
	}
}
/**
 * 具体的目标类
 */
public class Magic implements AbstractComponent {
	@Override
	public String descirbe() {
		return " 法师 ";
	}
}

 管理所有具体装饰类的抽象类

/**
 * 管理所有具体的装饰类
 */
public abstract class AbstractDecorator implements AbstractComponent {
	
	// 持有目标类对应引用
	private AbstractComponent component;
	
	public AbstractDecorator(AbstractComponent component) {
		this.component =  component;
	}

	@Override
	public String descirbe() {
		return component.descirbe();
	}
}

具体装饰类 

/**
 * 具体装饰类
 */
public class ArmsDecorator extends AbstractDecorator {

	public ArmsDecorator(AbstractComponent component) {
		super(component);
	}

	@Override
	public String descirbe() {
		return super.descirbe() + " 带上了武器";
	}
}
/**
 * 具体装饰类
 */
public class JacketDecorator extends AbstractDecorator {

	public JacketDecorator(AbstractComponent component) {
		super(component);
	}

	@Override
	public String descirbe() {
		return super.descirbe() + " 穿上时装";
	}
}
/**
 * 具体装饰类
 */
public class PlantDecorator extends AbstractDecorator {

	public PlantDecorator(AbstractComponent component) {
		super(component);
	}

	@Override
	public String descirbe() {
		return super.descirbe() + " 穿上了裤子";
	}
}
/**
 * 具体装饰类
 */
public class ShoeDecorator extends AbstractDecorator {

	public ShoeDecorator(AbstractComponent component) {
		super(component);
	}

	@Override
	public String descirbe() {
		return super.descirbe() + " 穿上滑板鞋";
	}
}

 测试

/**
 * 装饰设计模式测试
 */
public class TestDecorator {
	public static void main(String[] args) {
		// 创建一个战士对象
		Warrior warrior = new Warrior();
		System.out.println(warrior.descirbe());
		// 创建带上武器
		AbstractComponent component = new ArmsDecorator(warrior);
		System.out.println(component.descirbe());
		// 创建一个带武器和穿了鞋子的战士
		component = new ShoeDecorator(component);
		System.out.println(component.descirbe());
		
		// 装饰法师
		component = new PlantDecorator(new JacketDecorator(new ShoeDecorator(new ArmsDecorator(new Magic()))));
		System.out.println(component.descirbe());
	}
}

设计模式是软件开发人员在软件开发过程中面临一般问题的解决方案。

设计模式还是要慢慢体会。。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值