java模式之装饰模式

1. 什么叫装饰模式?

根据业务的需求,需要对一个类的方法进行增强的处理。

 

2. 为什么需要装饰模式?

拓展性更加的好,当觉得这个装饰不好的时候,可以直接拿下,不需要改变任何的代码。

 

3. 装饰模式的一个具体的应用?   电子发票系统

代码:

package com.huxin.decorator.test;
import java.util.Date;
import java.util.Vector;abstract public class Order {private String name;private Date date ;private Vector itemsLinelist  = new Vector(10);public Order(){System.out.println("调用order的构造方法");}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public double getTotalPrice() {double price = 0.0d;for(int i =0 ;i<itemsLinelist.size();i++){ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);price +=itemsLine.getSubTotalPrice();}return price;}public void addItems(ItemsLine itemsLine){itemsLinelist.add(itemsLine);}public void removeItems(ItemsLine itemsLine){itemsLinelist.remove(itemsLine);}public void print(){
System.out.println("order==================================================");for(int i =0 ;i<itemsLinelist.size();i++){ItemsLine itemsLine = (ItemsLine)itemsLinelist.get(i);itemsLine.print();}}
}


 

package com.huxin.decorator.test;public class SalsOrder extends Order {public SalsOrder(){System.out.println("调用SalsOrder的构造方法");}public void print(){super.print();}
}


 

package com.huxin.decorator.test;public class ItemsLine {private String itemsName;private double unit ;private int number;private double subTotalPrice;public String getItemsName() {return itemsName;}public void setItemsName(String itemsName) {this.itemsName = itemsName;}public double getUnit() {return unit;}public void setUnit(double unit) {this.unit = unit;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public double getSubTotalPrice() {return number * unit;}public void print(){System.out.println("购买商品的名字为:"+ itemsName+ "单价为:"+ unit+ "数量为"+ number);}
}


 

package com.huxin.decorator.test;abstract public class AbstractDecorator extends Order{protected Order order; //装饰类必须接受这个order对象public AbstractDecorator(Order order){this.order = order;this.setDate(order.getDate());this.setName(order.getName());}public void print(){super.print();}
}


 

package com.huxin.decorator.test;public class FootDecorator extends AbstractDecorator {//装饰类必须接受这个order对象public FootDecorator(Order order){super(order);
System.out.println("我后被创建FootDecorator");}public void print(){order.print();printFooter();}public void printFooter(){
System.out.println("foot==================================================");System.out.println("总价格为:"+ super.order.getTotalPrice());}
}


 

package com.huxin.decorator.test;public class HeaderDecorator extends AbstractDecorator {//装饰类必须接受这个order对象public HeaderDecorator(Order order){super(order);
System.out.println("我先被创建HeaderDecorator");}public void print(){printHeader();super.order.print();}public void printHeader(){
System.out.println("header==================================================");System.out.println("顾客的姓名为:"+ super.order.getName() +"日期为:"+ super.order.getDate());}
}


 

package com.huxin.decorator.test;import java.util.Date;public class Client {private static Order order;public static void main(String[] args) {order = new SalsOrder();ItemsLine itemsLine = new ItemsLine();itemsLine.setItemsName("杯子");itemsLine.setUnit(8.0d);itemsLine.setNumber(1);ItemsLine itemsLine2 = new ItemsLine();itemsLine2.setItemsName("疯狂java");itemsLine2.setUnit(610d);itemsLine2.setNumber(2);order.addItems(itemsLine2);order.addItems(itemsLine);order.setDate(new Date());order.setName("胡鑫");order= new HeaderDecorator(new FootDecorator(order));order.print();}
}


 

 

 

 

转载于:https://www.cnblogs.com/jiangu66/p/3165477.html

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

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

相关文章

字体文件解析 c语言,如何正确地从C语言的文件中读取某些字符串?

您试图从文件中读取的内容并不简单,但可以通过设置一个标志来处理,该标志告诉您是否已经看到a或b,跳过所有空白和:字符,将所有其他字符存储在缓冲区中,根据需要重新分配,然后在第二个“A”或“B”找到了,把那个角色放回FILE*流与ungetc,nul终止并返回缓冲区。听起来很简单——对…

如何判断linux系统是32位还是64位的?

最简单的是输入命令&#xff1a;uname -m 查看输出&#xff0c;如果输出是i686这种ixxx系列的&#xff0c;都是32位系统&#xff0c;如果出现x86_64这样的&#xff0c;就是64位。

02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)

VTK6 引入了许多不兼容的变化&#xff0c;这其中就包括用SetInputData()和SetInputConnection()替换SetInput()方法。在先前的版本中&#xff0c;VTK4 引入了SetInput()方法&#xff0c;VTK5中引入了SetInputConnection()。 下面举一些例子&#xff1a;在如下例子中&#xff0c…

c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*************************************************************************************** 外部中断0实验 *实现现象&#xff1a;下载程序后按下K3按键可以对D1小灯状态取反。注意事项&#xff1a;无。***********************…

Java Web笔记之Struts2.1 +Hibernate3.3 +Spring3.0

2019独角兽企业重金招聘Python工程师标准>>> 1、Struts2 1.1、了解Struts2 Struts2是基于MVC设计模式的Java Web框架技术之一&#xff0c;按照MVC设计思想把Java Web应用程序分为&#xff1a; 控制器层&#xff0c;包括核心控制器FilterDispatcher和业务控制器Actio…

高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、高地址和低地址 二、高字节低字节 如int a16777220&#xff0c;化为十六进制是0x01 00 00 04&#xff0c;则04属于低字节&#xff0c;01属于高字节。 三、大小端模式 &#xff08;1&#xff09;如果a在内…

漫谈数据挖掘从入门到进阶

入门&#xff1a;数据挖掘入门的书籍&#xff0c;中文的大体有这些&#xff1a;Jiawei Han的《数据挖掘概念与技术》Ian H. Witten / Eibe Frank的《数据挖掘 实用机器学习技术》Tom Mitchell的《机器学习》TOBY SEGARAN的《集体智慧编程》Anand Rajaraman的《大数据》Pang-Nin…

C语言程序设计二期末考试,C语言程序设计期末考试试卷2.doc

C语言程序设计期末考试试卷2选择题(单选题&#xff0c;每小题2分&#xff0c;共15题&#xff0c;30分)注意&#xff1a;请将答案写在每小题的题号左边1&#xff0e;一个C程序由若干个C函数组成&#xff0c;各个函数在文件中的位置为_____A______。A) 任意B) 第一个函数必须是主…

(转)Asp.Net生命周期系列一

原文地址&#xff1a;http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html Asp.Net生命周期对于初级甚至中级程序员来说&#xff0c;一直都是一个难题&#xff0c;很多程序员不了解生命周期&#xff0c;导致使用Asp.Net做开发感觉很不灵活&#xff0c;感觉太多东…

c语言枚举法礼泡声次数,C语言枚举类型举例

C语言枚举类型举例注&#xff1a;以下全部代码的执行环境为VC 6.0宏和枚举的区别宏和枚举之间的差别主要在作用的时期和存储的形式不同&#xff0c;宏是在预处理的阶段进行替换工作的&#xff0c;它替换代码段的文本&#xff0c;程序运行的过程中宏已不存在了。而枚举是在程序运…

【IOS】集成zxing(二维码扫描)

现在zxing已经到了2.2版本&#xff0c;以前的集成方式出了点问题。下面我做出一点修正。以前的版本的集成方法&#xff0c;参考&#xff1a;http://blog.devtang.com/blog/2012/12/23/use-zxing-library/按照以前的方式做好后 然后就是适配以下现在的版本的修改1.增加 SenTe…

与TCP有关的面试内容

以下内容源于网络资料的学习与整理。 参考博客 TCP/IP四层模型 - BlueTzar - 博客园&#xff08;OSI参考模型和TCP模型的详解&#xff0c;包括格式&#xff09; TCP/IP协议-为什么说TCP是可靠连接_shuaixio的博客-CSDN博客&#xff08;为什么可靠及优缺点&#xff09; 两张动图…

登录后跳转到原页面

可以在点击登录页面时&#xff0c;进行url传值&#xff0c;比如从a.html到b.html,可以a.html?oldurlb.html 带有特殊符号、中文的可以加个encodeURIComponent()转载于:https://www.cnblogs.com/wuchao/p/3179350.html

c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...

#include#include#include#include#include#includevoid pause();typedef struct STUDENT{char studentNumber[20]; //学生学号char studentName[20]; //学生姓名char className[20]; //班级名称float chinese; //语文绩float maths; //数学成绩float english; //外语成绩float…

嵌入式面试中常见的编程题目

以下内容源于网络资料的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 目录 1、将字符串反转 2、数字翻转和回文判断 3、大小端问题 &#xff08;1&#xff09;判断大小端 &#xff08;2&#xff09;大小端转换 4、实现函数memcpy(), strcpy(), strcmp(), strc…

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表&#xff0c;我去看了一下&#xff0c;丢失了很多个表&#xff1b; 问题&#xff1a; 直接拷贝data下的数据库数据进行备份…

回旋矩形C语言,C语言回旋函数解释下,该如何处理

当前位置:我的异常网 C语言 C语言回旋函数解释下,该如何处理C语言回旋函数解释下,该如何处理www.myexceptions.net 网友分享于&#xff1a;2013-06-08 浏览&#xff1a;30次C语言回旋函数解释下给定两个整数M&#xff0c;N&#xff0c;生成一个M*N的矩阵&#xff0c;矩阵中元…

JUnit4概述

JUnit4是JUnit框架有史以来的最大改进&#xff0c;其主要目标便是利用Java5的Annotation特性简化测试用例的编写。先简单解释一下什么是Annotation&#xff0c;这个单词一般是翻译成元数据。元数据是什么&#xff1f;元数据就是描述数据的数据。也就是说&#xff0c;这个东西在…

嵌入式面试中常见的问答题(线程进程、TCP等)

以下内容源于网络资料的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、线程、进程的区别联系 见https://blog.csdn.net/oqqHuTu12345678/article/details/72637318的表格 个人理解&#xff1a;进程相当于一个运行中的程序&#xff0c;线程相当于程序中的某些函数…