装饰模式笔记
来源:互联网 发布:十一双十一淘宝 编辑:程序博客网 时间:2024/05/29 03:07
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
- 装饰器模式(笔记)
- 装饰模式--学习笔记
- 装饰器模式笔记
- 装饰模式学习笔记
- 装饰者模式笔记
- 装饰模式学习笔记
- 装饰模式笔记
- 设计模式笔记--装饰模式
- 设计模式笔记:装饰模式
- 装饰模式笔记(Java)
- 装饰模式(学习笔记)
- java笔记 装饰设计模式
- 装饰设计模式 练习笔记
- 装饰器模式学习笔记
- 装饰者模式学习笔记
- 【学习笔记】装饰者模式
- 设计模式学习笔记-装饰模式
- 大话设计模式----装饰模式笔记
- 【NGUI】头顶血条(2D与3D的实现)
- ugui优化
- logstash传输文本文件到HDFS
- matlab图像处理相关函数
- 双端顺序栈基本操作
- 装饰模式笔记
- HDU 1213 How Many Tables
- codeforces——466A——Cheap Travel
- javax.mail发送邮件
- 第十三周
- SecCore关键数据结构
- HTML界面应用标签
- 单循环链表的创建、插入删除等操作
- Unity 与 NGUI 坐标转换原理