您的位置:首页 > 编程语言 > Java开发

java设计模式学习之装饰模式

2017-10-12 11:05 676 查看

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

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:多层装饰比较复杂。

实例:给一个人配置穿衣

1:代码结构图

2:创建一个person类(  ConcreteComponent)

package DecoratorModel;
/**
* 2017-10-9 10:39:09
* 装饰器设计模式
* Person 类 ConcreteComponent
* @author 我不是张英俊
*
*/
public class Person {
public Person(){}
private String name;
public Person(String name){
this.name=name;
}
public void Show(){
System.out.println("装扮的"+name);
}
}

3:服饰类

package DecoratorModel;
/**
*服饰类(Decorator)
* @author 我不是张英俊
*
*/
public class Finery extends Person{
protected Person component;
//打扮
public void Decorate(Person component){
this.component=component;
}
public void Show(){
if(component!=null){
component.Show();
}
}
}

4:具体服饰类

public class Tshirts extends Finery {
public void Show(){
System.out.println("大T恤");
super.Show();
}
}
public class BigTrouser extends Finery {
public void Show(){
System.out.println("垮裤");
super.Show();
}
}
public class Sneakers extends Finery {
public void Show(){
System.out.println("破球鞋");
super.Show();
}
}
public class Suit extends Finery {
public void Show(){
System.out.println("西装");
super.Show();
}
}
public class Tie extends Finery {
public void Show(){
System.out.println("领带");
super.Show();
}
}
public class LeatherShoes extends Finery {
public void Show(){
System.out.println("皮鞋");
super.Show();
}
}

5:测试类

public class test {
public static void main(String[] args) {
Person xc=new Person("旺财");
Sneakers pqx=new Sneakers();
BigTrouser kk=new BigTrouser();
Tshirts dtx=new Tshirts();
pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.Show();
}
}

6:控制台

大T恤
垮裤
破球鞋
装扮的旺财

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息