装饰模式设计原理

来源:互联网 发布:英文缩写查询软件 编辑:程序博客网 时间:2024/06/09 14:53

通过本篇的学习,您将掌握:

1、什么是装饰模式

2、装饰模式的运用场景

3、如何封装装饰模式

4、如何使用调用封装的装饰模式


前言:装饰模式也称为包装模式,结构型设计模式之一。其使用一种对客户端透明的方式来拓展对象的功能。同时也是继承关系的一种替代方案之一。


一、什么是装饰模式

动态的给对象添加一些额外的功能。


二、装饰模式的应用场景

需要透明且动态地拓展类的功能时。


三、装饰模式的封装

装饰模式主要由四大块组成:

1、抽象组件:可以是一个类或者一个接    口,其充当一个被装饰的原始对象

2、组件具体实现类:我们装饰的具体对象

3、抽象装饰者:为了装饰我们的组件对象

4、装饰者具体实现类


下面我们通过一个demo的具体代码来体现装饰模式在项目中的具体使用:

1、抽象组件


public abstract class Person {    public abstract  void  dresss();}


2、组件具体实现类

public class Boy extends Person{    @Override    public void dresss() {        System.out.println("实现最基本的衣着,穿了条内衣内裤");    }}


3、抽象装饰者

public class ClothPerson extends  Person{    private  Person mPerson;    public ClothPerson(Person person){        this.mPerson = person;    }    @Override    public void dresss() {        //调用person类的dress()方法        mPerson.dresss();    }}


4、装饰者具体实现类

(一)public class CheapCloth extends ClothPerson{    public CheapCloth(Person person) {        super(person);    }    @Override    public void dresss() {        super.dresss();        dressShort();    }    private void dressShort(){        System.out.println("穿了条短裤");    }}(二)public class ExpansiveCloth extends  ClothPerson{    public ExpansiveCloth(Person person) {        super(person);    }    @Override    public void dresss() {        dressWatch();        super.dresss();        dressJean();        dressLeather();    }    private  void dressLeather(){        System.out.println("穿一件皮革的衣服");    }    private void dressJean(){        System.out.println("穿一条牛仔裤");    }    private void dressWatch(){        System.out.println("戴一块劳力士手表");    }}


最后,我们封装好了相关类后,看下具体的使用方式:

Person person = new Boy();ClothPerson cheap = new CheapCloth(person);cheap.dresss();ClothPerson expansive =new ExpansiveCloth(person);expansive.dresss();