首页 > 编程 > Java > 正文

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

2019-11-26 11:12:38
字体:
来源:转载
供稿:网友

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

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

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

实例:给一个人配置穿衣

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恤
垮裤
破球鞋
装扮的旺财

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表