Java的I/O各种类就是典型的装饰者模式.
以下是一个洗衣机的装饰者实现:
java代码:
package com.liu.pattern10;
public class TestDecorator {
public static void main(String[] args) {
// TODO Auto-generated method stub
Washer washer = new Washer();
WasherDecorator decorator = new ZNWahser(new GTWahser(washer));
decorator.wash();
}
}
interface IWasher{
public void wash();
}
abstract class WasherDecorator implements IWasher{
private IWasher washer;
public WasherDecorator(IWasher washer){
this.washer = washer;
}
public void wash(){
washer.wash();
}
}
class GTWahser extends WasherDecorator{
public GTWahser(IWasher washer) {
super(washer);
// TODO Auto-generated constructor stub
}
public void addWater(){
System.out.println("加水");
}
public void wash(){
super.wash();
addWater();
}
}
class ZNWahser extends WasherDecorator{
public ZNWahser(IWasher washer) {
super(washer);
// TODO Auto-generated constructor stub
}
public void test(){
System.out.println("智能");
}
public void wash(){
super.wash();
test();
}
}
class Washer implements IWasher{
@Override
public void wash() {
System.out.println("洗衣服");
}
}
c#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace com.liu.pattern10
{
class TestDecorator
{
static void Main(string[] args)
{
Washer washer = new Washer();
WasherDecorator decorator = new ZNWahser(new GTWahser(washer));
decorator.Wash();
System.Console.ReadKey();
}
}
interface IWasher{
void Wash();
}
abstract class WasherDecorator : IWasher{
private IWasher washer;
public WasherDecorator(IWasher washer){
this.washer = washer;
}
public virtual void Wash(){
washer.Wash();
}
}
class GTWahser : WasherDecorator{
public GTWahser(IWasher washer):base(washer) {
}
public void AddWater(){
System.Console.WriteLine("加水");
}
public override void Wash(){
base.Wash();
AddWater();
}
}
class ZNWahser : WasherDecorator{
public ZNWahser(IWasher washer):base(washer) {
}
public void Test(){
System.Console.WriteLine("智能");
}
public override void Wash()
{
base.Wash();
Test();
}
}
class Washer : IWasher{
public void Wash() {
System.Console.WriteLine("洗衣服");
}
}
}