Java装饰者模式(思维导图)

图1 装饰者模式【点击查看图片】
1,一个简单的以人为主体的装饰者模式
被装饰者
public interface Human {//被装饰者
public void wearClothes();
public void walkToWhere();
}
//定义被装饰者,被装饰者初始状态有些自己的装饰
class Person implements Human {
@Override
public void wearClothes() {
// TODO Auto-generated method stub
System.out.println("穿什么呢。。");
}
@Override
public void walkToWhere() {
// TODO Auto-generated method stub
System.out.println("去哪里呢。。");
}
}
装饰者
public abstract class Decorator implements Human {//定义装饰者
private Human human;
public Decorator(Human human) {//有参构造
this.human = human;
}
@Override
public void wearClothes() {
human.wearClothes();
}
@Override
public void walkToWhere() {
human.walkToWhere();
}
}
class Decorator_zero extends Decorator {
public Decorator_zero(Human human) {
super(human);
}
public void goHome() {
System.out.println("进房子。。");
}
public void findMap() {
System.out.println("书房找找Map。。");
}
@Override
public void wearClothes() {
// TODO Auto-generated method stub
super.wearClothes();
goHome();
}
@Override
public void walkToWhere() {
// TODO Auto-generated method stub
super.walkToWhere();
findMap();
}
}
class Decorator_first extends Decorator {
public Decorator_first(Human human) {
super(human);
}
public void goClothespress() {
System.out.println("去衣柜找找看。。");
}
public void findPlaceOnMap() {
System.out.println("在Map上找找。。");
}
@Override
public void wearClothes() {
// TODO Auto-generated method stub
super.wearClothes();
goClothespress();
}
@Override
public void walkToWhere() {
// TODO Auto-generated method stub
super.walkToWhere();
findPlaceOnMap();
}
}
class Decorator_two extends Decorator {
public Decorator_two(Human human) {
super(human);
}
public void findClothes() {
System.out.println("找到一件D&G。。");
}
public void findTheTarget() {
System.out.println("在Map上找到神秘花园和城堡。。");
}
@Override
public void wearClothes() {
// TODO Auto-generated method stub
super.wearClothes();
findClothes();
}
@Override
public void walkToWhere() {
// TODO Auto-generated method stub
super.walkToWhere();
findTheTarget();
}
}
测试验证
public class Client {
public static void main(String[] args) {
Human person = new Person();
Decorator decorator = new Decorator_two(new Decorator_first(new Decorator_zero(person)));
decorator.wearClothes();
decorator.walkToWhere();
}
}
2,一个以汉堡添为主体的装饰者模式
被装饰者
public abstract class Humburger {//被装饰者,主体,被修补的物件
protected String name ;
public String getName(){
return name;
}
public abstract double getPrice();
}
class ChickenBurger extends Humburger {//被修饰者的原始状态
public ChickenBurger(){
name = "鸡腿堡";
}
@Override
public double getPrice() {
return 10;
}
}
装饰者
public abstract class Condiment extends Humburger {//装饰者【修修补补的材料】
public abstract String getName();
}
class Lettuce extends Condiment {
Humburger humburger;
public Lettuce(Humburger humburger){
this.humburger = humburger;
}
@Override
public String getName() {
return humburger.getName()+" 加生菜";
}
@Override
public double getPrice() {
return humburger.getPrice()+1.5;
}
}
class Chilli extends Condiment {
Humburger humburger;
public Chilli(Humburger humburger){
this.humburger = humburger;
}
@Override
public String getName() {
return humburger.getName()+" 加辣椒";
}
@Override
public double getPrice() {
return humburger.getPrice(); //辣椒是免费的哦
}
}
测试验证
public class Client {
public static void main(String[] args) {
Humburger humburger = new ChickenBurger();//鸡腿堡 价钱:10.0
System.out.println(humburger.getName()+" 价钱:"+humburger.getPrice());
Lettuce lettuce = new Lettuce(humburger);//鸡腿堡 加生菜 价钱:11.5
System.out.println(lettuce.getName()+" 价钱:"+lettuce.getPrice());
Chilli chilli = new Chilli(humburger);//鸡腿堡 加辣椒 价钱:10.0
System.out.println(chilli.getName()+" 价钱:"+chilli.getPrice());
Chilli chilli2 = new Chilli(lettuce);//鸡腿堡 加生菜 加辣椒 价钱:11.5
System.out.println(chilli2.getName()+" 价钱:"+chilli2.getPrice());
}
}
参考:https://blog.csdn.net/jason0539/article/details/22713711
Java装饰者模式(思维导图)的更多相关文章
- [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍
阅读<Java并发编程实践>一书后整理的思维导图.
- [Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性
依据<Java并发编程实践>一书整理的思维导图.
- [Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合
依据<Java并发编程实践>一书整理的思维导图. 第一部分: 第二部分:
- 学习Java的9张思维导图
转自:https://blog.csdn.net/aitaozi11/article/details/79652943 网上搜集了java的学习思维导图,分享给大家. 01.Java程序设计(基础) ...
- Java Web学习过程的思维导图
今天找文件,无意中翻到老师前段时间总结的知识点.觉得应该有点用处,所以分享给大家. 第一次在博客园发表,如有错误,还请指正.
- java编程思想-泛型思维导图
- java编程思想-并发思维导图
- java编程思想-注解思维导图
- Java基础知识学习思维导图
- 思维导图学《On Java》基础卷
说明 原来读过 <Java 编程思想(第 4 版)>,但是这个版本还是基于 Java 5 讲解.由于 Java 8 做出了非常大的改进(是 Java 变化最大的版本),且截止到 2022- ...
随机推荐
- Airbnb新用户的民宿预定结果预测
1. 背景 关于这个数据集,在这个挑战中,您将获得一个用户列表以及他们的人口统计数据.web会话记录和一些汇总统计信息.您被要求预测新用户的第一个预订目的地将是哪个国家.这个数据集中的所有用户都来自美 ...
- 风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- [go]gin框架
gin参考 Gin框架返回值 // 返回json func main() { r := gin.Default() //方法一: 自己拼接json // gin.H is a shortcut for ...
- [Java复习] Spring Boot
什么是Spring Boot? 传统SSH/SSM框架配置繁琐,有很多重复的模板配置,效率不高. Spring Boot快速创建可独立运行,生产级别的Spring应用程序. 主要是基于Spring家族 ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_10-修改页面-前端-修改页面
1.进入页面,通过钩子方法请求服务端获取页面信息,并赋值给数据模型对象 2.页面信息通过数据绑定在表单显示 3.用户修改信息点击“提交”请求服务端修改页面信息接口 3.3.3 修改页面 3.3.3.1 ...
- 【工具】sqlmap 中文手册 使用教程
日期:2019-07-28 09:27:27 更新: 作者:Bay0net 介绍:自己翻译了一下,做个备忘. 0x01. 基本信息 官网 sqlmap: automatic SQL injection ...
- Vue打包文件放在服务器后,浏览器存在缓存问题
每次打包更新版本发到服务器上,导致偶尔会出现不能即使更新最新代码,浏览器存在缓存的问题. 解决方法:找到webpack .prod.conf.js 1.定义版本变量: const Version = ...
- HOSTS大法解决Github Clone太慢
经常要clone github中的一些项目,无奈如果不爬梯子的话速度实在是龟速,经常1k/s,于是搜了下解决方法,改HOSTS大法. Windows下在C:/Windows/system32/driv ...
- SpringBoot: 12.异常处理方式2(使用@ExceptionHandle注解)(转)
1.编写controller package com.bjsxt.controller; import org.springframework.stereotype.Controller; impor ...
- codevs 3031:最富有的人
题目描述 Description 在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择. 输入描述 Input Description 第一行 ...