zoukankan      html  css  js  c++  java
  • 装饰模式

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

    装饰模式是为已有功能动态地添加更多功能的一种方式。装饰模式提供了非常好的解决方案,它把每个装饰功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象。

    装饰模式的优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。

    People.java类

    package decorate;
    
    
    public class People{
        private String name;
        
        public People() {
        }
        public People(String name) {
            this.name = name;
        }
    
        public void operation() {
            System.out.println("开始装饰:"+name);
        }
    }

    Finery.java类

    package decorate;
    
    public class Finery extends People{
        private People people;
        
        public void decorate(People people) {
            this.people = people;
        }
    
        public void operation(){
            people.operation();
        }
    }

    TshirtFinery.java类

    package decorate;
    
    public class TshirtFinery extends Finery {
    
        @Override
        public void operation() {
            super.operation();
            this.show();
    
        }
        public void show(){
            System.out.println("大T衫");
        }
    
    }

    BigTrouserFinery.java类

    package decorate;
    
    public class BigTrouserFinery extends Finery {
        @Override
        public void operation() {
            super.operation();
            this.show();
            
        }
        public void show(){
            System.out.println("大裤衩");
        }
    }

    ShoeFinery.java类

    package decorate;
    
    public class ShoeFinery extends Finery {
        @Override
        public void operation() {
            super.operation();
            this.show();
            
        }
        public void show(){
            System.out.println("长袜子");
        }
    }

    Business.java类

    package decorate;
    
    public class Business {
        public static void main(String[] args) {
            People p = new People("桂清");
            TshirtFinery t = new TshirtFinery();
            BigTrouserFinery b = new BigTrouserFinery();
            ShoeFinery s = new ShoeFinery();
            t.decorate(p);
            b.decorate(t);
            s.decorate(b);
            s.operation();
    
        }
    }
  • 相关阅读:
    软件工程实践总结作业
    软工实践 产品个人分析
    软工交接情况
    结队第二次作业——WordCount进阶需求
    团队展示(团队)
    软工第一次结对
    软工实践第二次作业
    selenium_04_课堂笔记
    selenium_05_课堂笔记
    selenium_06_课堂笔记
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7015549.html
Copyright © 2011-2022 走看看