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();
    
        }
    }
  • 相关阅读:
    PHP 使用 GET 传递数组变量
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7015549.html
Copyright © 2011-2022 走看看