`
Flyingh
  • 浏览: 18307 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Decorator

 
阅读更多


装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的


装饰者模式动态地将责任附加到对象上。

若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

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!
 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    decorator-4.1.2.rar ,亲测可用

    《Python装饰器深入解析——基于decorator-4.1.2版本》 在Python编程语言中,装饰器(Decorator)是一种强大的工具,它允许我们修改或增强函数、类或其他可调用对象的行为,而无需改动它们的源代码。在本文中,我们...

    decorator-4.1.2.tar.gz

    装饰器(Decorator)在Python编程语言中是一种强大的设计模式,它允许我们动态地修改或增强函数、类或对象的行为。`decorator-4.1.2.tar.gz` 是一个特定版本(4.1.2)的装饰器库的归档文件,这个库专门用于支持...

    WPF 装饰器Decorator 和 Adorner综合实例

    在Windows Presentation Foundation (WPF) 中,装饰器(Decorator)和adorner是两种非常重要的UI元素,它们可以用于增强和扩展WPF控件的功能和视觉表现。本文将深入探讨这两种技术,并通过具体实例来阐述其在实际开发...

    设计模式之 Decorator模式和代码实现

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...

    java Decorator装饰模式例子

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...

    vue脚手架,vue3 组件 vue-property-decorator 组件

    `vue-property-decorator`是一个库,它是Vue.js和TypeScript的结合,提供了装饰器来帮助我们在TypeScript中更好地声明和管理组件的属性。它使得我们可以利用TypeScript的强类型系统,提高代码的可维护性和可读性。...

    decorator python(decorator-3.4.0.tar.gz).rar

    这个"decorator python"模块是版本3.4.0的实现,其核心概念是通过函数来包装(即装饰)其他函数,以增强被装饰函数的行为。这个模块可能是由社区成员贡献并分享的,因此它属于"其他资源"类别。 在Python中,装饰器...

    PyPI 官网下载 | protocol_implements_decorator-0.3.1.tar.gz

    标题中的"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实例

    这是一个整合了多个技术框架的项目实例,主要涵盖了MyBatis3、SpringMVC4、AngularJS、MySQL数据库以及Decorator模式的应用。以下是对这些技术及其在项目中的应用进行的详细解释: 1. MyBatis3:MyBatis是一个优秀...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    装饰器模式[Decorator]

    装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...

    前端开源库-pure-render-decorator

    `pure-render-decorator`是一个非常有用的开源库,它专门设计用于提升React组件的性能,通过确保只在必要时进行渲染,从而降低不必要的DOM操作。这个库的核心理念是实现“纯渲染”,也就是当组件的props或state没有...

    Decorator-3.4.0

    "Decorator-3.4.0" 是一个Python装饰器库的版本,提供了方便和灵活的方式来创建装饰器。这个版本的压缩包文件名为"decorator-3.4.0.tar.gz",它是一个常见的归档格式,用于存储和分发源代码。 在Python中,装饰器...

    C++ Decorator模式

    Decorator模式是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的行为或职责,而不会破坏封装性。这种模式的核心思想是通过装饰类包装原对象,实现对原对象功能的扩展,同时保持与原接口的一致性。 ...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    【标题】:“装饰者模式(decorator)在Head First设计模式中的详解” 【内容】: 装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的...

    timeout_decorator.py

    windows系统下的python超时装饰器,解决pypi中timeout-decorator库在windows系统上不可用的问题。

    decorator-4.2.1-py2.py3-none-any.whl

    decorator-4.2.1-py2.py3-none-any.whl

    decorator-wechat,微信现代化(Nevolution decorator).zip

    decorator-wechat,微信现代化(Nevolution decorator).zip

    PyPI 官网下载 | decorator-4.0.11-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:decorator-4.0.11-py2.py3-none-any.whl

    sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ).zip

    sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ) sequelize装饰器和 sequelize ( v3,v4,v5 )的一些其他特性。模型定义@Table API@Column API使用情况配置文件模型路径解析模型关联插件On

Global site tag (gtag.js) - Google Analytics