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

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

九大常用设计模式

单例模式:https://blog.csdn.net/qq_37902949/article/details/87903569

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

工厂方法模式:https://blog.csdn.net/qq_37902949/article/details/87931610

代理模式:https://blog.csdn.net/qq_37902949/article/details/87931864

模板方法模式:https://blog.csdn.net/qq_37902949/article/details/87931912

观察者模式:https://blog.csdn.net/qq_37902949/article/details/87931995

适配器模式:https://blog.csdn.net/qq_37902949/article/details/87931940

装饰者模式:https://blog.csdn.net/qq_37902949/article/details/87931800

策略模式:https://blog.csdn.net/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());
	}
}

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

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

你可能感兴趣的:(Java,设计模式)