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();
    
        }
    }
  • 相关阅读:
    数据库的基本操作
    这是数据库的知识了
    这就全都是了解的东西啦
    互斥锁
    我只会用threading,我菜
    violet
    网络编程II
    网络编程
    这是网络编程的一小步,却是我的一大步
    莫比乌斯反演(一)从容斥到反演
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7015549.html
Copyright © 2011-2022 走看看