十、结构型模式——装饰者模式
- 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
- 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。
- 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
- 具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。
//接口
public interface Duck {void call();
}
//被装饰的具体鸭子
public class ConcreteDuck implements Duck{@Overridepublic void call() {System.out.println("guagua");}
}
//装饰者
public class RubberDuck implements Duck {private ConcreteDuck cDuck;public RubberDuck(ConcreteDuck cDuck) {this.cDuck = cDuck;}@Overridepublic void call() {cDuck.call();System.out.println("我是一只玩具鸭"); }
}
//大圣的尊号
public interface TheGreatestSage { public void move();
}
public class Monkey implements TheGreatestSage {@Overridepublic void move() {//代码System.out.println("Monkey Move");}}
public class Change implements TheGreatestSage {private TheGreatestSage sage;public Change(TheGreatestSage sage){this.sage = sage;}@Overridepublic void move() {// 代码sage.move();}}
public class Fish extends Change {public Fish(TheGreatestSage sage) {super(sage);}@Overridepublic void move() {System.out.println("Fish Move");}
}
public class Bird extends Change {public Bird(TheGreatestSage sage) {super(sage);}@Overridepublic void move() {// 代码System.out.println("Bird Move");}
}
public class Client {public static void main(String[] args) {TheGreatestSage sage = new Monkey();// 第一种写法TheGreatestSage bird = new Bird(sage);TheGreatestSage fish = new Fish(bird);// 第二种写法//TheGreatestSage fish = new Fish(new Bird(sage));fish.move(); }}
十、结构型模式——装饰者模式相关推荐
- Java设计模式之结构型:装饰器模式
一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...
- Java设计模式之结构型:享元模式
一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...
- 结构型设计模式之组合模式
结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...
- 结构型模式-装饰器模式
1.概述 快餐店有炒面.炒饭这些快餐,可以额外附加鸡蛋.火腿.培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦. 使用继承的方式存在的问题: 扩展性不好 ...
- 设计模式 结构型模式 -- 装饰者模式(概述 快餐店案例 模式优点 使用场景 源码解析 BufferedWriter 和代理模式的区别)
1. 装饰者模式 1.1 概述 我们先来看一个快餐店的例子: 快餐店有炒面.炒饭这些快餐,可以额外附加鸡蛋.火腿.培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得 ...
- 创建型、结构型、行为型模式(2)
来源:http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题. 除了Single ...
- 创建型、结构型、行为型模式(1)
来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Struct ...
- 设计模式(结构型)之享元模式(Flyweight Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式——结构型之用桥梁模式(Bridge Pattern)将“抽象”与“实现”解耦(五)
引言 相信对于现实生活中这样的情况都不陌生,比如说开关与它具体控制的电器,开关的类型多种多样,而电器也是千变万化,两者之间相对独立变化却又耦合在一起,再比如说奶茶店的奶茶,有不同规格大小.不同口味.不 ...
最新文章
- Ubuntu开机自启动与sh脚本
- linux 加载u盘、光盘、软盘 mount使用指南
- 【oracle】sqlnet.ora 访问控制策略
- ASP.NET中IP地址,当前用户的方法属性大整合- -
- 整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划
- C语言课后习题(13)
- java 动态编译_老生常谈Java动态编译(必看篇)
- Ansible 系统概述与部署(1)
- 森林病虫防治系统 (七)
- C++模版类List实现
- Java下载安装与环境配置
- html旅游网站设计与实现——绿色古典旅游景区 HTML+CSS+JavaScript
- AI2021下载 Illtrator2021安装教程
- 51单片机项目设计:WiFi视频小车制作教程、正点原子wifi摄像头模块应用、手机wifi控制
- 最强 IOS系统改定位
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构 1
- PHP架构师“精简”进阶路线规划
- android中如何如何让dailog横屏显示
- 微信卡券开发HelloWord
- Material Design 总结
热门文章
- 106码号办理需要具备的条件和需要的材料
- ERROR: child process failed, exited with error number 51
- cf819C Jatayu‘s Balanced Bracket Sequence
- sql注入基础原理(超详细)
- phpcms v9和discuz X3.1实现同步登陆退出论坛(已实现)
- 测试用例_等价类划分方法
- 魔方(8)123魔方、223魔方、233魔方、香蕉魔方
- 计算机一级考试B十类理论题,计算机一级考试试题
- 2019年EI收录的会议(计算机/网络通信方向)
- [源码和文档分享]基于JAVA的葫芦娃 — 最终之战