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

Posted 香风智乃哈~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式-装饰模式(大鸟和小菜Java版)相关的知识,希望对你有一定的参考价值。

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

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

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.csdn.net/yixiang1989/article/details/38469931

以上是关于大话设计模式-装饰模式(大鸟和小菜Java版)的主要内容,如果未能解决你的问题,请参考以下文章

大话设计模式-状态模式(大鸟和小菜Java版)

大话设计模式-模板方法模式(大鸟和小菜Java版)

大话设计模式-外观模式(大鸟和小菜java版)

大话设计模式-组合模式(大鸟和小菜Java版)

大话设计模式-建造者模式(大鸟和小菜java版)

大话设计模式-抽象工厂模式(大鸟和小菜Java版)