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恤
    垮裤
    破球鞋
    装扮的旺财
  • 相关阅读:
    oracle12.2RAC之OGG安装配置(一)
    【java框架】JPA(3) -- JPA映射关系
    【java框架】JPA(2) -- JPA基础
    【java框架】Struts2(3) -- Struts2结果视图及参数接收
    【问题管理】-- Struts2配置struts.xml中Action访问报There is no Action mapped for namespace...
    【java框架】Struts2(2) -- Struts2配置
    JavaScript(1) -- JS入门
    【java框架】MyBatis(2)--Mapper代理接口及批量操作
    【java框架】MyBatis(1)--MyBatis入门
    C# AutoMapper 了解一下
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/7641082.html
Copyright © 2011-2022 走看看