zoukankan      html  css  js  c++  java
  • 设计模式学习--装饰模式

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

    优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

    缺点:多层装饰比较复杂。

    实例:给一个人配置穿衣

    1:代码结构图

    2:创建一个person类(  ConcreteComponent)

    package DecoratorModel;
    
    /**
     * 2017-10-9 10:39:09
     * 装饰器设计模式
     * Person 类  ConcreteComponent
     * @author 我不是张英俊
     *
     */
    public class Person {
    
        public Person(){}
        
        private String name;
        public Person(String name){
            this.name=name;
        }
        
        public void Show(){
            System.out.println("装扮的"+name);
        }
    }

    3:服饰类

    package DecoratorModel;
    
    /**
     *服饰类(Decorator)
     * @author 我不是张英俊
     *
     */
    public class Finery extends Person{
    
        protected Person component;
        //打扮
        public void Decorate(Person component){
            this.component=component;
        }
        
        public void Show(){
            if(component!=null){
                component.Show();
            }
        }
    }

    4:具体服饰类

    public class Tshirts extends Finery {
        public void Show(){
            System.out.println("大T恤");
            super.Show();
            }
    }
    
    public class BigTrouser extends Finery {
        public void Show(){
            System.out.println("垮裤");
            super.Show();
        }
    }
    
    public class Sneakers extends Finery {
        public void Show(){
            System.out.println("破球鞋");
            super.Show();
            }
    }
    
    public class Suit extends Finery {
        public void Show(){
            System.out.println("西装");
            super.Show();
        }
    }
    
    public class Tie extends Finery {
        public void Show(){
            System.out.println("领带");
            super.Show();
        }
    }
    
    public class LeatherShoes extends Finery {
        public void Show(){
            System.out.println("皮鞋");
            super.Show();
        }
    }

    5:测试类

    public class test {
    
        public static void main(String[] args) {
            Person xc=new Person("旺财");        
            Sneakers pqx=new Sneakers();
            BigTrouser kk=new BigTrouser();
            Tshirts dtx=new Tshirts();
            pqx.Decorate(xc);
            kk.Decorate(pqx);
            dtx.Decorate(kk);
            dtx.Show();
        }
    
    }

    6:控制台

    大T恤
    垮裤
    破球鞋
    装扮的旺财
  • 相关阅读:
    Git 远程仓库分支管理
    Git 本地仓库管理
    Git 本地仓库管理
    SQLAlchemy_定义(一对一/一对多/多对多)关系
    SQLAlchemy_定义(一对一/一对多/多对多)关系
    自动化生成 Openstack 新项目开发框架
    自动化生成 Openstack 新项目开发框架
    Python 数据结构_队列
    Python 数据结构_队列
    Python 数据结构_堆栈
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/7641082.html
Copyright © 2011-2022 走看看