给模型加装饰器Java,装饰器设计模式
装饰者模式说, 只是“将灵活的附加职责动态地附加到对象上”。
换句话说, 装饰器模式使用合成而不是继承来扩展对象在运行时的功能。
装饰器模式也称为包装器。
装饰图案的优势
它提供了比静态继承更大的灵活性。
因为可以通过对新类进行编码来进行更改, 所以可以增强对象的可扩展性。
它允许你从目标类开发一系列功能, 而不是将所有行为编码到对象中, 从而简化了编码。
装饰图案的用法
它用于:
当你想要透明, 动态地向对象添加职责而又不影响其他对象时。
当你想向对象添加职责时, 将来可能需要更改。
通过子类扩展功能不再可行。
用于装饰器模式的UML:
第1步:创建食物界面。
public interface Food {
public String prepareFood();
public double foodPrice();
}// End of the Food interface.
步骤2:创建一个VegFood类, 该类将实现Food接口并覆盖其所有方法。
public class VegFood implements Food {
public String prepareFood(){
return "Veg Food";
}
public double foodPrice(){
return 50.0;
}
}
第3步:创建一个FoodDecorator抽象类, 该类将实现Food接口并覆盖所有方法, 并且可以装饰更多食物。
public abstract class FoodDecorator implements Food{
private Food newFood;
public FoodDecorator(Food newFood){
this.newFood=newFood;
}
@Override
public String prepareFood(){
return newFood.prepareFood();
}
public double foodPrice(){
return newFood.foodPrice();
}
}
步骤4:创建NonVegFood具体类, 该类将扩展FoodDecorator类并覆盖所有方法。
public class NonVegFood extends FoodDecorator{
public NonVegFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Roasted Chiken and Chiken Curry ";
}
public double foodPrice(){
return super.foodPrice()+150.0;
}
}
第5步:创建一个ChineeseFood具体类, 该类将扩展FoodDecorator类并覆盖所有方法。
public class ChineeseFood extends FoodDecorator{
public ChineeseFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Fried Rice and Manchurian ";
}
public double foodPrice(){
return super.foodPrice()+65.0;
}
}
步骤6:创建一个DecoratorPatternCustomer类, 该类将使用Food接口来使用客户想要的食物类型(Decorates)。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class DecoratorPatternCustomer {
private static int choice;
public static void main(String args[]) throws NumberFormatException, IOException{
do{
System.out.print("========= Food Menu ============ \n");
System.out.print(" 1. Vegetarian Food. \n");
System.out.print(" 2. Non-Vegetarian Food.\n");
System.out.print(" 3. Chineese Food. \n");
System.out.print(" 4. Exit \n");
System.out.print("Enter your choice: ");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
choice=Integer.parseInt(br.readLine());
switch (choice) {
case 1:{
VegFood vf=new VegFood();
System.out.println(vf.prepareFood());
System.out.println( vf.foodPrice());
}
break;
case 2:{
Food f1=new NonVegFood((Food) new VegFood());
System.out.println(f1.prepareFood());
System.out.println( f1.foodPrice());
}
break;
case 3:{
Food f2=new ChineeseFood((Food) new VegFood());
System.out.println(f2.prepareFood());
System.out.println( f2.foodPrice());
}
break;
default:{
System.out.println("Other than these no food available");
}
return;
}//end of switch
}while(choice!=4);
}
}
输出量
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 1
Veg Food
50.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 2
Veg Food With Roasted Chiken and Chiken Curry
200.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 3
Veg Food With Fried Rice and Manchurian
115.0
========= Food Menu ============
1. Vegetarian Food.
2. Non-Vegetarian Food.
3. Chineese Food.
4. Exit
Enter your choice: 4
Other than these no food available
给模型加装饰器Java,装饰器设计模式相关推荐
- java 调用scala 类_如何使用java类加载器调用带参数的scala函数?
我正在寻找一些将scala jar加载到java类加载器的指导. 当我使用java jar文件时,下面的函数对我有效. 其中,arr是一个java.net.URL数组,用于我需要加载到类加载器中的所有 ...
- Java 装饰器模式详解
转载请注明出处:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 在上面的几篇文章中,着重介绍了java 中常见的 IO 相关知 ...
- java 装饰器_JAVA装饰器模式
Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样 ...
- JAVA开发的23种设计模式之 — 装饰器模式 代理器模式
装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活 维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 :增加一个修饰类包裹 ...
- Java装饰器模式详解
前言 装饰器模式也叫做包装器模式,属于结构性设计模式一种,装饰器设计模式在实际的生活中也有很多体现,举例来说,某手机厂商发布了XXX标准版手机,为了吸引用户眼球,提升销量,还特别有纪念碑,青春版,至尊 ...
- python两层装饰器_python装饰器
Python的装饰器的英文名叫Decorator,基本上适用的场景就是"装修":不涉及主流程业务,用于鉴权.审计等副业. 1.函数 在python中,函数通过def关键字.函数名和 ...
- python装饰器-python装饰器简介---这一篇也许就够了(推荐)
Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基 ...
- python装饰器类-PYTHON里的装饰器能装饰类吗
扩展回答 如何理解python里的装饰器 通常可以理解它是一个hook 的回调函数. 或者是理解成python 留给二次开发的一个内置API. 一般是用回调和hook 方式实现的. 如何理解Pytho ...
- python装饰器-python修饰器(装饰器)以及wraps
Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器的引入 初期及问题的诞生 假如现在在一个公司,有A B C三个业务部门,还有S一 ...
最新文章
- 边缘网联与5G等服务器
- python-opencv 轮廓检测
- Java反射以及应用
- noip2016普及组 魔法阵vijos2012
- Spring boot 和Vue开发中CORS跨域问题
- 020_Vue非父子组件之间数据交互
- poj 1932(spfa判断环)
- 融合libevent和protobuf
- concurrent map使用
- Educational Codeforces Round 47 (Rated for Div. 2) :E. Intercity Travelling
- htc one m7 linux驱动,HTC One M7官方RUU固件包(可救砖)
- vcenter服务器修改ip,vcenter服务器默认ip地址
- BIND 服务器修复多个高危漏洞
- UI之CALayer详解(转)
- 用ICC编译MP3编码器LAME
- 一个故意不通过图灵测试的人工智能
- 必须安装三星系列android系统智能手机usb驱动程序,三星安卓4.0怎么刷机 三星安卓4.0刷机教程...
- 【操作系统】系统中断技术
- 基于Struts2的网上书城(仿当当网)系统
- 使用360安全卫士对计算机进行体检,360安全卫士使用教程 电脑体检
热门文章
- NSight Compute 用户手册(中)
- Activity在有Dialog时按Home键的生命周期
- idea中设置指向源代码Scala
- Python:模拟登录、点击和执行 JavaScript 语句案例
- [JS] [C] [编程题] 用户喜好
- Ubuntu 修改本地磁盘名称
- Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView
- android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating cl
- Ubuntu安装MongoDB
- 讯飞语音的中的bug用户校验失败