- 浏览: 18316 次
- 性别:
- 来自: 西安
最新评论
装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的
装饰者模式动态地将责任附加到对象上。
若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
1.下面是Food.java的代码:
package com.flyingh.abs; public abstract class Food { protected Food food; protected float price; { setPrice(); } public abstract void setPrice(); public float cost() { // TODO Auto-generated method stub return food != null ? food.cost() + price : price; } }
下面是Bread.java的代码:
package com.flyingh.con; import com.flyingh.abs.Food; public class Bread extends Food { public Bread() { super(); } public Bread(Food food) { super(); this.food = food; } @Override public void setPrice() { // TODO Auto-generated method stub price = 1; } }
下面是Milk.java的代码:
package com.flyingh.con; import com.flyingh.abs.Food; public class Milk extends Food { public Milk() { super(); } public Milk(Food food) { super(); this.food = food; } @Override public void setPrice() { // TODO Auto-generated method stub price = 1.5f; } }
下面是Egg.java的代码:
package com.flyingh.con; import com.flyingh.abs.Food; public class Egg extends Food { public Egg() { super(); } public Egg(Food food) { super(); this.food = food; } @Override public void setPrice() { // TODO Auto-generated method stub price = 0.5f; } }
下面是Client.java的代码:
package com.flyingh.client; import com.flyingh.abs.Food; import com.flyingh.con.Bread; import com.flyingh.con.Egg; import com.flyingh.con.Milk; public class Client { public static void main(String[] args) { // bread:1 milk:1.5 egg:0.5 Food food1 = new Bread(new Milk(new Egg()));// 一份面包,一份牛奶,一份鸡蛋 Food food2 = new Bread(new Milk());// 一份面包,一份牛奶 Food food3 = new Bread(new Milk(new Egg(new Egg())));// 一份面包,一份牛奶,两份鸡蛋 Food food4 = new Milk(); food4 = new Milk(food4); food4 = new Bread(food4); food4 = new Egg(food4); System.out.println(food1.cost());// 3.0=0.5+1.5+1 System.out.println(food2.cost());// 2.5=1.5+1 System.out.println(food3.cost());// 3.5=0.5+0.5+1.5+1 System.out.println(food4.cost());// 4.5=1.5+1.5+1+0.5 } }
程序运行结果如下:
3.0 2.5 3.5 4.5
2.实现一个将大写英文字母变为小写,小写变为大写的Reader
下面是OppositeCaseReader.java的代码:
package com.flyingh.io; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class OppositeCaseReader extends FileReader { public OppositeCaseReader(String fileName) throws FileNotFoundException { super(fileName); // TODO Auto-generated constructor stub } @Override public int read() throws IOException { // TODO Auto-generated method stub int c = super.read(); return c == -1 ? c : (Character.isLowerCase((char) c) ? Character .toUpperCase((char) c) : Character.toLowerCase((char) c)); } @Override public int read(char[] cbuf, int offset, int len) throws IOException { // TODO Auto-generated method stub int number = super.read(cbuf, offset, len); for (int i = 0; i < cbuf.length; i++) { cbuf[i] = Character.isLowerCase(cbuf[i]) ? Character .toUpperCase(cbuf[i]) : Character.toLowerCase(cbuf[i]); } return number; } }
下面是Client.java的代码:
package com.flyingh.client; import java.io.FileReader; import java.io.IOException; import com.flyingh.io.OppositeCaseReader; public class Client { public static void main(String[] args) throws IOException { // test文件内容: This Is A Test! FileReader ocr1 = new OppositeCaseReader("test"); FileReader ocr2 = new OppositeCaseReader("test"); FileReader ocr3 = new FileReader("test"); System.out.println((char) ocr1.read()); char[] cbuf = new char[20]; ocr3.read(cbuf, 0, cbuf.length); System.out.println(cbuf); ocr2.read(cbuf, 0, cbuf.length); System.out.println(cbuf); } }
程序运行结果如下:
t This Is A Test! tHIS iS a tEST!
发表评论
文章已被作者锁定,不允许评论。
-
Interpreter
2011-11-24 21:19 839Interpreter Pattern:其意图是给定一个语言, ... -
Visitor
2011-11-24 17:37 659Visitor Pattern:表示一个作用于某对象结构中的各 ... -
Mediator
2011-11-24 16:22 663Mediator Pattern: 用一 ... -
Prototype
2011-11-24 11:32 605Prototype Pattern:就是通过复制现在已经存在的 ... -
Memento
2011-11-23 21:56 685Memento Pattern:在不破坏封闭的前提下,捕获一个 ... -
Flyweight
2011-11-23 18:38 651享元模式以共享的方式高效地支持大量的细粒度对象. 1).Fl ... -
Builder
2011-11-22 16:38 763Builder Pattern:可以将一个产品的内部表象与产品 ... -
Bridge
2011-11-22 15:05 684桥梁模式的用意是"将抽象化(Abstraction) ... -
Chain Of Responsibility
2011-11-21 23:05 658Chain Of Responsibility Pattern ... -
Abstract Factory
2011-11-21 22:00 644下面以Mac和PC的CPU和RAM为例,代码如下: Cpu. ... -
Proxy
2011-11-18 18:47 661Proxy Pattern:对其他对象提供一种代理以控制对这个 ... -
State
2011-11-18 15:57 678State Pattern:当一个对象的内在状态改变时允许改变 ... -
Composite
2011-11-17 17:09 793Composite Pattern:意图是将对象组合成树形结构 ... -
Iterator
2011-11-16 16:56 891Iterator Pattern:其意图是提供一种方法顺序访问 ... -
Template Method
2011-11-16 11:43 660模板方法模式:在一个方法中定义一个算法的骨架,而将一些实 ... -
Facade
2011-11-15 23:00 598Facade Pattern:为子系统中的各类(或结构与方法) ... -
Adapter
2011-11-15 21:43 632Adapter Pattern:将一个类的接口,转换成客户所期 ... -
Command
2011-11-14 23:06 5731).下面以Boss和Clerk为例: Clerk.java ... -
Factory Method
2011-11-13 20:44 595Simple Factory: 以Fruit为例,以下是实现 ... -
Observer
2011-11-12 21:30 601观 察 者 模 式 定义了对象之间的一对多依赖,这样一来 ...
相关推荐
《Python装饰器深入解析——基于decorator-4.1.2版本》 在Python编程语言中,装饰器(Decorator)是一种强大的工具,它允许我们修改或增强函数、类或其他可调用对象的行为,而无需改动它们的源代码。在本文中,我们...
装饰器(Decorator)在Python编程语言中是一种强大的设计模式,它允许我们动态地修改或增强函数、类或对象的行为。`decorator-4.1.2.tar.gz` 是一个特定版本(4.1.2)的装饰器库的归档文件,这个库专门用于支持...
在Windows Presentation Foundation (WPF) 中,装饰器(Decorator)和adorner是两种非常重要的UI元素,它们可以用于增强和扩展WPF控件的功能和视觉表现。本文将深入探讨这两种技术,并通过具体实例来阐述其在实际开发...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
`vue-property-decorator`是一个库,它是Vue.js和TypeScript的结合,提供了装饰器来帮助我们在TypeScript中更好地声明和管理组件的属性。它使得我们可以利用TypeScript的强类型系统,提高代码的可维护性和可读性。...
这个"decorator python"模块是版本3.4.0的实现,其核心概念是通过函数来包装(即装饰)其他函数,以增强被装饰函数的行为。这个模块可能是由社区成员贡献并分享的,因此它属于"其他资源"类别。 在Python中,装饰器...
标题中的"PyPI 官网下载 | protocol_implements_decorator-0.3.1.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`protocol_implements_decorator`,版本为0.3.1,且以tar.gz格式打包。...
这是一个整合了多个技术框架的项目实例,主要涵盖了MyBatis3、SpringMVC4、AngularJS、MySQL数据库以及Decorator模式的应用。以下是对这些技术及其在项目中的应用进行的详细解释: 1. MyBatis3:MyBatis是一个优秀...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...
`pure-render-decorator`是一个非常有用的开源库,它专门设计用于提升React组件的性能,通过确保只在必要时进行渲染,从而降低不必要的DOM操作。这个库的核心理念是实现“纯渲染”,也就是当组件的props或state没有...
"Decorator-3.4.0" 是一个Python装饰器库的版本,提供了方便和灵活的方式来创建装饰器。这个版本的压缩包文件名为"decorator-3.4.0.tar.gz",它是一个常见的归档格式,用于存储和分发源代码。 在Python中,装饰器...
Decorator模式是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的行为或职责,而不会破坏封装性。这种模式的核心思想是通过装饰类包装原对象,实现对原对象功能的扩展,同时保持与原接口的一致性。 ...
【标题】:“装饰者模式(decorator)在Head First设计模式中的详解” 【内容】: 装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的...
windows系统下的python超时装饰器,解决pypi中timeout-decorator库在windows系统上不可用的问题。
decorator-4.2.1-py2.py3-none-any.whl
decorator-wechat,微信现代化(Nevolution decorator).zip
资源来自pypi官网。 资源全名:decorator-4.0.11-py2.py3-none-any.whl
sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ) sequelize装饰器和 sequelize ( v3,v4,v5 )的一些其他特性。模型定义@Table API@Column API使用情况配置文件模型路径解析模型关联插件On