【设计模式】装饰(Deractor)模式实例

系列文章目录

第五章设计模式(下)



前言

        设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

        学习设计模式可以提高程序员的思维能力编程能力设计能力,使程序设计更加标准化代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期

一、🌍装饰(Decorator)模式是什么?🌍

        在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式

二、🌍装饰(Decorator)模式的优缺点🌍

        优点:

    1)采用装饰模式扩展对象的功能比采用继承方式更加灵活

    2)可以设计出多个不同的具体装饰类,创造出多个不同行为的组合

        缺点:

    1)装饰模式增加了许多子类,如果过度使用会使程序变得很复杂

三、🌍装饰(Decorator)模式的结构🌍

           装饰模式主要包含以下角色:

   1)抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。

   2)具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。

   3)抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。

   4)具体装饰(Concrete Decorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

四、🌍实例演示🌍

1.🌕实例概述🌕

抽象构件角色:Gender抽象类

具体构件角色:Man类或Woman类

抽象装饰角色:Deractor抽象类,依赖于Gender类,是为了后面对gender的继承类进行操作

具体装饰角色:T_shirts类,Jacket类,Jeen类···(这里可以自己去扩写很多类)

2.🌕代码演示🌕

代码如下(示例):

package Decorate;

public class ClothDerector {

    public static void main(String[] args) {
        // 生成了一个人
        Man man = new Man();
        // 选择牛仔上衣
        derector jacket = new Jacket(man);
        jacket.dress();
        // 选择牛仔裤
        Jeen jeen = new Jeen(jacket);
        jeen.dress();
    }

}

//抽象构件
abstract class Gender {
    public abstract void dress();
}

//具体构件
class Man extends Gender{

    public void dress() {
        System.out.println("一个男人");
    }
}

class Woman extends Gender{

    public void dress() {
        System.out.println("一个女人");
    }

}

//抽象装饰
abstract class derector extends Gender {
    
    Gender gender;
    public derector(Gender gender) {
        this.gender = gender;
    }

}

//具体装饰
class T_shirts extends derector {
    public T_shirts(Gender gender) {
        super(gender);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void dress() {
        // TODO Auto-generated method stub
        System.out.println("T_shirts");

    }
}

class Jacket extends derector {
    public Jacket(Gender gender) {
        super(gender);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void dress() {
        // TODO Auto-generated method stub
        System.out.println("Jacket");

    }
}

class Jeen extends derector {
    public Jeen(Gender gender) {
        super(gender);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void dress() {
        // TODO Auto-generated method stub
        System.out.println("Jeen");
    }
}

3.🌕实验结果🌕

Jacket
Jeen


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了结构模式下装饰模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,装饰模式的优点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值