设计模式_Decorate(装饰)

装饰设计模式:对一组对象的功能进行增强时,就可以使用该模式进行问题的解决(装饰类和被装饰类必须所属于同一个接口或父类)
装饰和继承都能实现一样的特点:进行功能的扩展

装饰和继承的区别:装饰比继承要灵活
    继承:想要对操作的动作进行效率的提高,按照面向对象,可以通过继承对具体的对象进行功能的扩展,但是这样做并不理想,如果这个体系进行功能扩展,又多了流                对象那么这个流要提高效率,也要产生子类,这时会发现只为提高功能,进行的继承,导致继承体系越来越臃肿,不够灵活。
  
    装饰:将功能增强部分单独封装,哪个对象需要功能增强就将哪个对象和功能增强的对象相关联

public class Decorate {

    public static void main(String[] args) {

        Person p = new Person();

        //p.eat();

        

        NewPerson p1 = new NewPerson(p);

        p1.eat();

    }



}

class Person{

    public void eat(){

        System.out.println("吃白饭");

    }

}

//这个类的出现是为了增强Person而出现的

class NewPerson{

    private Person p;

    NewPerson(Person p){

        this.p = p;

    }

    public void eat(){

        System.out.println("开胃酒");

        p.eat();

        System.out.println("甜点");

    }

}

/*

 //继承也可以解决这个问题

class NewPerson2 extends Person{

    public void eat(){

        System.out.println("开胃酒");

        super.eat();

        System.out.println("甜点");

    }

}

*/

 

你可能感兴趣的:(设计模式)