设计模式——装饰模式

设计模式——装饰模式

@author 无忧少年

@createTime 2019/7/19

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

装饰器模式结构图:
装饰模式结构图

​ 这个设计模式最开始还不是很理解,跟着书敲了个例子,然后跟着代码走一遍才慢慢的理解的了这个设计模式,例子如下:

Person.class

// "Person"类    
public class Person {
    private  String name;
    public  Person(){};
    public  Person(String name){
        this.name=name;
    };
    public void Show(){
        System.out.println("装扮的"+this.name);
    }
}

Finery.class

// 服饰类
public abstract class Finery extends Person {
    protected  Person component;
    public void Decorate(Person component){
        this.component=component;
    }
    @Override
    public void Show(){
        if(component!=null){
            component.Show();
        }
    }
}

TShirts.class

// T恤类
public class TShirts  extends Finery{
    @Override
    public void Show(){
        System.out.print("大T恤  ");
        super.Show();
    }
}

BigTrouser.class

// 大裤子类
public class BigTrouser extends Finery{
    @Override
    public void Show(){
        System.out.print("大裤子  ");
        super.Show();
    }
}

Main.class

public class Main {
    public static void main(String[] args) {
        Person person=new Person("Lsw");
        TShirts tShirts=new TShirts();
        BigTrouser bigTrouser=new BigTrouser();
        tShirts.Decorate(person);
        bigTrouser.Decorate(tShirts);
        bigTrouser.Show();
    }
}
控制台输出:
大裤子  大T恤  装扮的Lsw

​ 这个例子中,各个职责是通过装饰抽象类Finery中的component串联起来,就仿佛一个链表一样的结构,先初始化一个person然后对person进行装饰。

装饰模式的优点:

  1. 把类中的装饰功能从类中搬移出去,这样可以简化原有的类
  2. 有效的把类的核心职责和装饰功能区分开了,而且可以取出相关类中重复的装饰逻辑。

装饰模式的缺点:

  1. 装饰模式的装饰顺序异常重要,顺序错误可能会导致程序错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值