装饰模式笔记

1. 装饰模式介绍

         装饰模式也称包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。现实生活中,你能看到很多装饰模式的例子,比如说人需要各式各样的衣着,不管你穿着什么样的衣物,对于个人的本质来说是不变的,充其量只是在外面披上一层遮羞物而已,这也是装饰模式。

2.装饰模式的定义

        动态地给一个对象添加一些额外的职责。

3.应用场景

         需要透明且动态地扩展类的功能时。比如说Android中给RecyclerView添加头布局和尾布局。

4.简单应用。

package com.ljt.decorationmodel;

/**
 * Created by ljt on 2017/5/20/020.
 */
public abstract class Person {
    /*
    * Person下有一个穿着的抽象方法
    * */
    public abstract void dressed();
}

public class PersonCloth extends  Person{
    //保持一个Person类的引用,作用:可以方便地调用具体被装饰对象中的方法
    protected  Person mPerson;

    public PersonCloth(Person mPerson) {
        this.mPerson = mPerson;
    }
    @Override
    public void dressed() {
        //调用Person类中的dressed方法
        mPerson.dressed();
    }
}

public class Boy extends Person{
    @Override
    public void dressed() {
        System.out.println("只穿内裤");
    }
}

public class CheapCloth extends PersonCloth {
    public CheapCloth(Person mPerson) {
        super(mPerson);
    }
    public void dressShorts(){
        System.out.println("穿条短裤");
    }
    @Override
    public void dressed() {
        super.dressed();
        dressShorts();
    }
}

public class ExpensiveCloth extends PersonCloth {

    public ExpensiveCloth(Person mPerson) {
        super(mPerson);
    }
    /*
        穿短袖
    * */
    private void dressShirt(){
        System.out.println("穿件短袖");
    }
    /*
    * 穿皮衣
    * */
    private void dressLeather(){
        System.out.println("穿件皮衣");
    }
    @Override
    public void dressed() {
        super.dressed();
        dressLeather();
        dressShirt();
    }
}

public class TestDecorationModel {
    public static void main(String[] args){
        Person person=new Boy();
        CheapCloth cheapCloth = new CheapCloth(person);
        cheapCloth.dressed();
        System.out.println("----------------------");
        //给他穿上贵的衣服
        PersonCloth personCloth=new ExpensiveCloth(person);
        personCloth.dressed();
    }
}

运行结果:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值