ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【大话设计模式】穿什么有这么重要?——装饰模式(Java)

2021-02-17 22:01:16  阅读:112  来源: 互联网

标签:Java show 大话 System Finery void 设计模式 public out


装饰模式类图
学习模式要善于变通,如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类。
同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,只保留一个ConcreteDecorator类即可。
在这里我们就没必要有Component类了,直接让服饰类Decorator继承人类ConcreteComponent就可。

简化的装饰模式类图

/**
 * @CreateTime: 2021/02/17 12:13
 * @Description: 装饰模式:人穿衣服
 */
public class PersonDecorator {
    private String name;

    public static void main(String[] args) {
        PersonDecorator pd = new PersonDecorator("小菜");

        // 1、普通方式
//        System.out.println("\n第一种装扮:");
//        pd.wearTShirts();
//        pd.wearTrouser();
//        pd.wearSneakers();
//        pd.show();
//
//        System.out.println("\n第二种装扮:");
//        pd.wearSuit();
//        pd.wearTie();
//        pd.wearLeatherShoes();
//        pd.show();

        // 2、继承
//        System.out.println("\n第一种装扮:");
//        Finery shirts = new TShirts();
//        Finery trouser = new Trouser();
//        Finery sneakers = new Sneakers();
//
//        shirts.show();
//        trouser.show();
//        sneakers.show();
//        pd.show();
//
//        System.out.println("\n第二种装扮:");
//        Finery suit = new Suit();
//        Finery tie = new Tie();
//        Finery shoes = new LeatherShoes();
//
//        suit.show();
//        tie.show();
//        shoes.show();
//        pd.show();

        // 3、装饰模式
        Person person = new Person("小菜");

        System.out.println("\n第一种装扮:");
        Finery shirts = new TShirts();
        Finery trouser = new Trouser();
        Finery sneakers = new Sneakers();

        // 装饰过程
        shirts.decorate(person);
        trouser.decorate(shirts);
        sneakers.decorate(trouser);
        sneakers.show();

        System.out.println("\n第二种装扮:");
        Finery suit = new Suit();
        Finery tie = new Tie();
        Finery shoes = new LeatherShoes();

        suit.decorate(person);
        tie.decorate(suit);
        shoes.decorate(tie);
        shoes.show();
    }

    public PersonDecorator(String name) {
        this.name = name;
    }

    public void wearTShirts() {
        System.out.print("T恤 ");
    }

    public void wearTrouser() {
        System.out.print("垮裤 ");
    }

    public void wearSneakers() {
        System.out.print("破球鞋 ");
    }

    public void wearSuit() {
        System.out.print("西装 ");
    }

    public void wearTie() {
        System.out.print("领带 ");
    }

    public void wearLeatherShoes() {
        System.out.print("皮鞋 ");
    }

    public void show() {
        System.out.println("装扮的" + name);
    }
}

/** ConcreteComponent */
class Person {
    public Person() {    }

    private String name = "";

    public Person(String name) {
        this.name = name;
    }

    public void show() {
        System.out.println("装扮的" + name);
    }
}

/** Decorator */
class Finery extends Person {
    private Person component = null;

    /** 打扮 */
    public void decorate(Person component) {
        this.component = component;
    }

    /** 服饰展示 */
    @Override
    public void show() {
        if (component != null) {
            component.show();
        }
    }
}

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

class Trouser extends Finery {
    @Override
    public void show() {
        System.out.print("垮裤 ");
        super.show();
    }
}

class Sneakers extends Finery {
    @Override
    public void show() {
        System.out.print("破球鞋 ");
        super.show();
    }
}

class Suit extends Finery {
    @Override
    public void show() {
        System.out.print("西装 ");
        super.show();
    }
}

class Tie extends Finery {
    @Override
    public void show() {
        System.out.print("领带 ");
        super.show();
    }
}

class LeatherShoes extends Finery {
    @Override
    public void show() {
        System.out.print("皮鞋 ");
        super.show();
    }
}

标签:Java,show,大话,System,Finery,void,设计模式,public,out
来源: https://www.cnblogs.com/ageovb/p/14409931.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有