装饰模式:鸡腿堡

news2024/11/27 13:49:38

文章目录

  • UML类图
  • 目录结构
  • Humburger.java
  • ChickenBurger.java
  • Condiment.java
  • Chuilli.java
  • Lettuce.java
  • Test.java
    • 深度理解test怎么写

UML类图

在这里插入图片描述

目录结构

我们从指向最多的开始写

Humburger.java

package zsms;

public abstract class Humburger {
	protected String name;
	
	public String getName(){//因为没abstract,所以猜是具体方法
		return name;
	}
	
	public abstract double getPrice();//因为是抽象方法 ,所以什么都不用写	
}

ChickenBurger.java

package zsms;

public class ChickenBurger extends Humburger {
	public ChickenBurger(){//继承了我们就初始化
		name = "鸡腿堡";
	}
		
	//继承了我们还要重写方法
	@Override
	public double getPrice(){  //给一个价格
		return 10; 
	}
}

Condiment.java

package zsms;
/*
 * 配料 佐料
 * 
 */
public abstract class Condiment extends Humburger {
	protected Humburger humburger;
	
	public abstract String getName();//抽象类啥也不写
}

Chuilli.java

package zsms;
/*
 * chilli 辣椒,辣酱
 * 
 */
public class Chilli extends Condiment {
	
	Humburger humburger;
	//再来一遍!!构造方法是初始化
	//有this,你的这个类里就得有 这个东西 Humburger humburger
	
	public Chilli(Humburger humburger){
		this.humburger = humburger;
	}
	
	@Override
	public String getName(){//认真理解, 你返回的是什么的名字?
		//是不是加了辣椒的汉堡?
		return humburger.getName()+"加辣椒";
	}
	
	@Override
	public double getPrice(){
		//返回的是谁的价格?
		//是不是带有辣椒的汉堡?
		//辣椒是免费的,所以直接返回 汉堡的价格
		return humburger.getPrice();
	}
}

Lettuce.java

package zsms;
/*
 * 生菜
 */
public class Lettuce extends Condiment {
	
	Humburger humburger;
	//构造方法  初始化  就是this 
	public Lettuce(Humburger humburger){
		this.humburger = humburger;
	}
	
	
	@Override
	public String getName(){
		/*
		 * get谁的名字?
		 * 加了生菜的汉堡的名字
		 */
		return humburger.getName()+"加生菜";
	}
	@Override 
	public double getPrice(){
		/*
		 * get谁的price?
		 * 加了生菜的汉堡的价格
		 * 生菜一块钱
		 */
		return humburger.getPrice()+1;
	}
	
	
}

Test.java

深度理解test怎么写


package zsms;

public class Test {
	public static void main(String[] args) {
		//weisha 
		//h什么也没有加
		Humburger h = new ChickenBurger();
		System.out.println(h.getName() + h.getPrice());
		
		//h1加生菜
		Humburger h1 = new Lettuce(h);
		System.out.println(h1.getName() + h1.getPrice());
		//h2加双倍生菜
		Humburger h2 = new Lettuce(h1);
		System.out.println(h2.getName() + h2.getPrice());
		
		//h3加辣椒
		Humburger h3 = new Chilli(h);
		System.out.println(h3.getName() + h3.getPrice());
		
		
		//h4都加
		Humburger h4 = new Chilli(h1);
		System.out.println(h4.getName() + h4.getPrice());

		
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1708584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学至乎没而后止也

开场白 学至后没而后止也这个题目的原话来自与荀子《劝学》。大家知道什么意思吗?学习要学到你人没了,才算停止了。通俗点说就是只要没学死就往死里学,高雅点说就是要保持终身学习。 在以前说终身学习好像是一种良好习惯或品德,…

AIGC 009-DaLLE2遇见达利!文生图过程中另外一种思路。

AIGC 009-DaLLE2遇见达利!文生图过程中另外一种思路。 0 论文工作 首先,遇见达利是我很喜欢的名字,达利是跟毕加索同等优秀的画家。这个名字就很有意思。 这篇论文提出了一种新颖的分层文本条件图像生成方法,该方法利用 CLIP&…

C语言笔记20 •整数和浮点数在内存中存储•

整数和浮点数在内存中存储 1.整数在内存中存储 整数在内存中存储比较简单,整数存储分为正整数存储和负整数存储。 对于有符号整数 符号位中0表示正整数,1表示负整数。 正整数在内存中存储: 正整数原码,反码 ,补码…

这款网站测试工具,炫酷且强大!【送源码】

随着互联网的普及和发展,Web 应用程序的数量也越来越多,各种网络问题也是层出不穷,因而监测这些 Web 应用程序的性能和可用性变得非常重要。 今天的文章,了不起和大家分享一款十分好用的的网站分析项目 - Web-Check。 项目简介 …

MemoryDB 2024 论文分享

论文地址点这里。 TL;DR MemoryDB 通过底层依赖 AWS 内部系统 Multi-AZ Transaction Log 实现了 11 个 9 的持久性保证。 通过依赖 Transaction Log 的 Condition API 和租约机制来实现了一致性和可用性保证。 通过周期性调度 Off-box 节点来外部 Rewrite binlog 避免了内存…

FastReport 主子表关系

代码中只需要绑定主表的数据就可以,子表的数据会通过报表中的关连关系自动到数据库中带出。 using CloudSaaS.DB.Handler; using CloudSaaS.Model; using CloudSaaS.DAL; using FastReport; using FastReport.Web; using System; using System.Collections.Generic;…

Llama模型家族训练奖励模型Reward Model技术及代码实战(一)

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

安全术语 | 软件包purl详解:跨工具、数据库、API和语言之间可靠地识别和定位软件包

软件包URL(purl,Package URL)是一个URL字符串,用于在编程语言、包管理器、包约定、工具、API和数据库中以最通用和统一的方式识别和定位软件包。purl是对现有方法进行标准化的尝试,以可靠地识别和定位软件包。 有望取代…

服务案例|网络攻击事件的排查与修复

LinkSLA智能运维管家V6.0版支持通过SNMP Trap对设备进行监控告警,Trap是一种主动推送网络设备事件或告警消息的方式,与SNMP轮询(polling)不同,具有以下几点优势: 1. 实时监控与快速响应 SNMP Trap能够实时…

【网络协议】应用层协议HTTPS

文章目录 为什么引入HTTPS?基本概念加密的基本过程对称加密非对称加密中间人攻击证书 为什么引入HTTPS? 由于HTTP协议在网络传输中是明文传输的,那么当传输一些机密的文件或着对钱的操作时,就会有泄密的风险,从而引入…

Mowgli用于配对多组学整合

对同一组细胞的多个分子层进行分析逐渐流行。越来越需要能够联合分析这些数据的多视图学习方法。Mowgli是一种支持配对多组学数据的整合方法。值得注意的是,Mowgli将非负矩阵分解和最优传输相结合,同时提高了非负矩阵分解的聚类性能和可解释性。作者将Mo…

AIGC 010-CLIP第一个文本和图像对齐的大模型!

AIGC 010-CLIP第一个文本和图像对齐的大模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 不客气的说CLIP和扩散模型的成功让计算式视觉领域几乎所有工作都重新做了一遍。 CLIP(对比语言-图像预训练)论文提出了一种新的对比学习方法&a…

adb获取包名和界面名

adb获取包名和界面名 mac adb shell dumpsys window windows | grep mFocusedApp windows adb shell dumpsys window windows | findstr mFocusedApp 这个是在当前手机打开哪个界面获取的就是哪个界面的包名与界面 注意第一次连接时会有提示,需要连接两次才可以 …

Java设计模式(23种设计模式 重点介绍一些常用的)

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:…

SpringBoot整合SpringSecurit,实现ajax的登录、退出、权限校验

1、本文章中SpringBoot整合SpringSecurity&#xff0c;只是基于session方式&#xff0c;并且没有使用到redis。 2、登录、登出都是通过ajax的方式进行。 项目目录&#xff1a; 1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xm…

Leecode热题100---二分查找---搜索插入位置

题目&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 nums 为 无重复元素 的 升序 排列数组 常规思路&#xff1a; class Solution { public:int f…

走进全球LED显示龙头艾比森,深挖逆势增长43%的数智化逻辑

在大环境不景气的情况下&#xff0c;有一家智能制造企业在2023年营收40亿&#xff0c;同比增长高达43%&#xff0c;海外营收增长约 46%&#xff0c;并且连续12年单品牌出口额第一。 这就是全球LED显示龙头艾比森。 5月9日&#xff0c;纷享销客带领近70位企业高管走进纷享销客…

设计模式 22 访问者模式 Visitor Pattern

设计模式 22 访问者模式 Visitor Pattern 1.定义 访问者模式是一种行为型设计模式&#xff0c;它允许你在不改变已有类结构的情况下&#xff0c;为一组对象添加新的操作。它将算法与对象结构分离&#xff0c;使你能够在不修改现有类的情况下&#xff0c;为这些类添加新的操作。…

922. 按奇偶排序数组 II - 力扣

1. 题目 给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 你可以返回 任何满足上述…

大学生简历写作指南:让你的简历脱颖而出

在求职过程中&#xff0c;简历不仅是展示自己的镜子&#xff0c;更是赢得面试机会的敲门砖。本文将从简历排版、专业简历定制、内容筛选等方面&#xff0c;提供全面的指导&#xff0c;帮助打造一份既有深度又接地气的简历。 一、简历排版 1.1 根据岗位要求调整排版 准备简历…