装饰模式

1、Component.java是定义一个对象的接口,可以给这些对象动态的添加职责

public abstract class Component
{
public abstract void Operation();
}

2、ConcreteComponent.java定义了一个具体的对象,也可以给这个对象添加一些职能。

public class ConcreteComponent extends Component
{

	@Override
	public void Operation()
	{
		// TODO Auto-generated method stub
		System.out.println("具体对象的操作");
	}

}

3、Decorator.java装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的。

public abstract class Decorator extends Component
{
	protected Component component;
	
	public void SetComponent(Component component)
	{
		this.component=component;
	}
	@Override
	public void Operation()
	{
		// TODO Auto-generated method stub
		if(component!=null)
		{
			component.Operation();
		}
		
	}

}

4、ConcreteDecoratorA.java就是具体的装饰对象,起到给Component添加职责的功能。
public class ConcreteDecoratorA extends Decorator
{
private String addedState;
@Override
	public void Operation()
	{
		// TODO Auto-generated method stub
		super.Operation();
		addedState="New State";
		System.out.println("具体装饰对象A的操作");
	}
}

5、ConcreteDecoratorB.java就是具体的装饰对象。
public class ConcreteDecoratorB extends Decorator
{
	@Override
	public void Operation()
	{
		// TODO Auto-generated method stub
		super.Operation();
		this.AddedBehavior();
		System.out.println("具体装饰对象B的操作");
	}
	private void AddedBehavior()
	{
		System.out.println("behavior");
	}
}

6、test.java类

public class test
{
public static void main(String[] args)
{
	ConcreteComponent c=new ConcreteComponent();
	ConcreteDecoratorA d1=new ConcreteDecoratorA();
	ConcreteDecoratorB d2=new ConcreteDecoratorB();
	
	d1.SetComponent(c);
	d2.SetComponent(d1);
	d2.Operation();
	
}
}

具体的实例,cc是一个Person,然后对他进行不同的服饰搭配

1、Person.java,对Person类进行衣着设置和行为设置。

public class Person
{
public void Show();

}


2、ConcretePerson.java,具体的人的名称以及行为设置

public class ConcretePerson extends Person
{
    protected String name;
	public ConcretePerson(String name)
	{
		this.name=name;
	}
	
	@Override
	public void Show()
	{
		System.out.println("装扮的人是:"+name);
		System.out.println("今天很高兴");
		
	}

}

3、Decorator.java,装扮类

public class Decorator extends Person
{
protected Person person;
public void SetDecorate(Person person)//接受具体的装扮类的对象
{
	this.person=person;
}
	
@Override
public void Show()
{
	// TODO Auto-generated method stub
	if(person!=null)
	{
		person.Show();
	}
}
}

4、PersonDecoratorA.java具体的装扮类

public class PersonDecoratorA extends Decorator
{
@Override
public void Show()
{
	// TODO Auto-generated method stub
	System.out.println("穿衬衫");
	super.Show();//调用父类的Show方法,实现了功能累加
}
}

5、PersonDecoratoB.java具体的装扮类

public class PersonDecoratorB extends Decorator
{
@Override
public void Show()
{
	// TODO Auto-generated method stub
	System.out.println("穿西服");
	super.Show();
}
}
6、测试类test1.java

public class test1
{
public static void main(String[] args)
{
	Person p=new ConcretePerson("cc");
	System.out.println("第一种装扮:");
	PersonDecoratorA pa=new PersonDecoratorA();
	PersonDecoratorB pb=new PersonDecoratorB();
	pa.SetDecorate(p);
	pb.SetDecorate(pa);
	pb.Show();
}
}

运行结果:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值