大话设计模式-装饰模式(大鸟和小菜Java版)

本文介绍装饰模式的概念及其在Java中的实现方式。装饰模式允许在不改变原有类的基础上动态扩展功能,提高代码灵活性。通过实例演示了如何为Person类添加不同的装饰(如衣物),展示了装饰模式的强大之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。(百度百科)

这个模式让后期的修改变得极为简单,真的就高内聚低耦合,如果想换装扮或者添加装扮,只需要添加一个类,或者修改一下就能完成。很高程度上提高了效率。

Person类和装饰打扮的代码

package 设计模式.装饰模式;
//定义一个Person类
public class Person {
//    定义私有变量
    private String name;
//无参构造方法
    public Person() {
    }
//有参构造方法
    public Person(String name) {
        this.name = name;
    }
//    定义一个方法
    public void show(){
        System.out.println("受害者(装饰者):"+this.name);
    }
}

// 定义一个衣服类
class Clothes extends Person{
    private Person p;
//打扮方法
    public void decorate(Person p){
        this.p = p;
    }

//重写show方法
    @Override
    public void show() {
//        等于null的话就是没有穿衣服?
        if(p != null){
            p.show();
        }
    }
}

//具体的装饰方法,下面五个类是一样的(可以根据自己的兴趣进行书写)
class CauClothes1 extends Clothes{
//    重写show方法
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰跨裤");
    }
}

class CauClothes2 extends Clothes{
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰动漫T恤");
    }
}

class CauClothes3 extends Clothes{
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰皮鞋");
    }
}

class CauClothes4 extends Clothes{
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰女仆装");
    }
}

class CauClothes5 extends Clothes{
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰高跟鞋");
    }
}

class CauClothes6 extends Clothes {
    @Override
    public void show() {
        super.show();
        System.out.println("已装饰女仆发饰");
    }
}

客户端调用代码

package 设计模式.装饰模式;

public class Test {
    public static void main(String[] args) {
//        new一个穿衣服的对象
        Person p1 = new Person("小菜");
//        这里使用的是多态
        Clothes c1 = new CauClothes1();
        Clothes c2 = new CauClothes2();
        Clothes c3 = new CauClothes3();


//调用打扮的这个方法
        c1.decorate(p1);
        c2.decorate(c1);
        c3.decorate(c2);


//穿衣效果展示出来
        c3.show();


        Person p2 = new Person("大鸟");
        Clothes c4 = new CauClothes4();
        Clothes c5 = new CauClothes5();
        Clothes c6 = new CauClothes6();
        c4.decorate(p2);
        c5.decorate(c4);
        c6.decorate(c5);

        c6.show();

        Person p3 = new Person("香风智乃");
        c5.decorate(p3);
        c4.decorate(c5);
        c2.decorate(c4);
        c6.decorate(c2);

        c6.show();

    }
}

以上就是本文的装饰模式啦~~

参考大佬的文章(更加的详细还有uml图),附上链接:https://blog.youkuaiyun.com/yixiang1989/article/details/38469931

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值