java_设计模式_装饰设计模式
package IO;
/* * 装饰设计模式 模拟咖啡
* 1.抽象组件:需要装饰的抽象对象(接口或抽象父类)
* 2.具体组件:需要装饰的对象
* 3.抽像装饰类:包含了对抽象组件的引用以及装饰着共有的方法
* 4,具体装饰类:被装饰的对象
* */
public class Test2 {
public static void main(String[] args) {
Drink coffee=new Coffee();
System.out.println(coffee.info()+"--->"+coffee.cost());
Drink suger=new Suger(coffee);
//装饰
System.out.println(suger.info()+"--->"+suger.cost());
Drink milk=new milk(coffee);
System.out.println(milk.info()+"--->"+milk.cost());
milk=new milk(suger);
System.out.println(milk.info()+"--->"+milk.cost());
}
}
//抽象组件
interface Drink{
double cost();//费用
String info();//说明
} //具体组件
class Coffee implements Drink{
private String name="原味咖啡";
@Override
public double cost() {
return 10;
}
@Override
public String info() {
return name;
}
}
//抽象装饰类
abstract class Decorate implements Drink{ //对抽象组件的引用
private Drink drink;
public Decorate(Drink drink){
this.drink=drink; }
@Override
public double cost() {
return this.drink.cost();
}
@Override
public String info() {
return this.drink.info();
}
}
//具体的装饰类
class milk extends Decorate{
public milk(Drink drink) {
super(drink);//super(参数):调用基类中的某一个构造函数
}
@Override
public double cost() {
return super.cost()*4;
}
@Override
public String info() {
return super.info()+"加入了牛奶";
}
}
//具体的装饰类
class Suger extends Decorate{
public Suger(Drink drink) {
super(drink);
}
@Override
public double cost() {
return super.cost()*2;
}
@Override
public String info() {
return super.info()+"加入了蔗糖";
}
}
class Cat{
public Cat(Object obj) {
// super();
}
public Cat(Object obj,Object obj1) {
// super();
}
}
class cat01 extends Cat{
public cat01(Object obj,Object obj1) {
super(obj);
/*记住一点:在构造子类时,一定会调用到父类的构造方法。因为父类中的元素也需要被初始化。
* 所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。
* 如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的无参构造 */
}
}
java_设计模式_装饰设计模式的更多相关文章
- Java IO 流 -- 设计模式:装饰设计模式
在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(ne ...
- java 28 - 3 设计模式之 装饰设计模式
装饰设计模式 装饰设计模式概述 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类.是继承的替代方案 优点 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添 ...
- JAVA的设计模式之装饰设计模式
1.装饰设计模式 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: 2.看这个图可能不容易理解,举两个 ...
- java_设计模式_装饰者模式_Decorator Pattern(2016-07-28)
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性
27.01 反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...
- Java中IO流中的装饰设计模式(BufferReader的原理)
本文粗略的介绍下JavaIO的整体框架,重在解释BufferReader/BufferWriter的演变过程和原理(对应的设计模式) 一.JavaIO的简介 流按操作数据分为两种:字节流与字符流. 流 ...
- 实践GoF的23种设计模式:装饰者模式
摘要:装饰者模式通过组合的方式,提供了能够动态地给对象/模块扩展新功能的能力.理论上,只要没有限制,它可以一直把功能叠加下去,具有很高的灵活性. 本文分享自华为云社区<[Go实现]实践GoF的2 ...
- Java 设计模式泛谈&装饰者模式和单例模式
设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...
- 黑马程序员——JAVA基础之装饰设计模式
------- android培训.java培训.期待与您交流! ---------- 装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能. ...
随机推荐
- Your wechat account may be LIMITED to log in WEB wechat, error info: <error><ret>1203</ret><message>为了你的帐号安全,此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。Windows微信下载地址:WeChat for PC
转载:https://zhuanlan.zhihu.com/p/76180564 微信网页版限制登录或禁止登录将影响一大批使用itchat等Web Api方案的微信机器人 网页版微信 API 被封了, ...
- 使用Echarts实现折线图的一点总结
使用Echarts的一点总结 1.安装,我使用得vue cnpm install echarts --save 2.在入口文件main.js中注册,并使用 // 引入折线图 echarts impor ...
- actiBPM插件的办法
1.下载actiBPM到本地 从IDEA官网下载actiBPM.jar包 IDEA官网:https://plugins.jetbrains.com/ 官网搜索actiBPM 2.从本地安装actiBP ...
- iOS13禁用深色模式
全局禁用深色模式(暗黑模式)在Info.plist中增加UIUserInterfaceStyle,值为Light,如下 <key>UIUserInterfaceStyle</key& ...
- PyCharm专业版2019.3.2激活码到期2089年!!!
Pycharm是一款很好用的python开发工具,开发Python爬虫和Python web方面都很不错 这里我为大家提供了pycharm激活方式2089年(都支持PyCharm20 激活步骤如下: ...
- ansible笔记(13):变量(二)
1.谈一谈[Gathering Facts]:使用setup模块查看 当我们运行一个playbook时,默认都会运行一个名为“[Gathering Facts]”的任务,前文中已经大致的介绍过这个默认 ...
- K3/Cloud点按钮打开单据,列表,动态表单,简单账表和直接Sql报表示例
BOS IDE中配置了个界面,拖了动态表单界面,加了5个测试按钮. 点击“打开单据”维护界面, 会跳转到一个新的主界面页签,[物料]新增 点击“打开列表”,会弹出[物料]列表界面 点击“打开动态表单” ...
- window使用pycharm远程连接服务器
1.进入pycharm, File->Settings->Deployment下: 1.新加一个Server,type为SFTP,name自定义一个,例如UI自动化项目: 2.在SFTP ...
- Unity 坐标系转换
在Unity中我们通常会用到以下几个坐标系下的点: 世界坐标系:World Space 简单来讲,我们通过 transform.position | transform.rotation 获取得到的位 ...
- 题解 SP27102/UVA1747 【Swap Space】
SP27102 [Swap Space] 双倍经验:UVA1747 Swap Space 用(a,b)表示每个硬盘的原容量和新文件系统下的容量.分两种情况考虑:a≤b和a>b 第一类a≤b格式化 ...