美文网首页
设计模式-装饰器模式

设计模式-装饰器模式

作者: 暴龙战士蔡徐坤 | 来源:发表于2017-11-08 16:11 被阅读0次

    参考网站

    http://www.runoob.com/design-pattern/factory-pattern.html

    什么是装饰器模式?

    装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构性模式,他是作为现有的类的一个包装。

    这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

    下面的这个例子,就是对一块面包进行装饰。面包大同小异,但是它有不同的口味,如美式面包,法式面包等等。就是通过在同一块普通面包的基础上进行装饰,因为口味不同,有的加的东西又不一样。但是通过装饰器模式就能很好地解决这种问题。

    使用方法

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

    步骤

    创建一个接口

    Bread.java 面包类

    public interface Bread {
        public void show();//面包显示
    }
    

    创建需要装饰的实体类

    AmericanBread.java 美式面包

    public class AmericanBread implements Bread {
        private double money = 5.2;
        
        @Override
        public void cost() {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void show() {
            // TODO Auto-generated method stub
            System.out.println("AmericanBread");
        }
    
    }
    

    创建实现了面包接口的装饰器类

    BreadDecorator.java 面包装饰器类

    public class BreadDecorator implements Bread {
        private Bread bread;
        
        public BreadDecorator(Bread bread) {
            this.bread = bread;
            // TODO Auto-generated constructor stub
        }
        @Override
        public void show() {
            // TODO Auto-generated method stub
            bread.show();
        }
    
    }
    

    创建拓展了BreadDecorator类的实体装饰类

    GarlicDecorator.java 大蒜装饰类

    public class GarlicDecorator extends BreadDecorator{
        public GarlicDecorator(Bread bread){
            super(bread);
            addGarlic(bread);
        } 
        
        public void addGarlic(Bread bread){
            System.out.println("加蒜");
        }
    }
    

    客户端使用GarlicDecorator类来装饰Bread对象

    Client.java 客户端类

    public class Client {
        
        public static void main(String ars[]){
            Bread americanBread = new AmericanBread();
            
            Bread garlicAmericanBread = new GarlicDecorator(americanBread);
            garlicAmericanBread.show();
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式-装饰器模式

          本文链接:https://www.haomeiwen.com/subject/dcrymxtx.html