java装饰者模式

java装饰者模式(扩展BufferedReader的readline()功能)

装饰者模式简介

  • 作用:增强一个类的功能,并使类之间可以相互修饰

装饰者模式的构建步骤

  1. 在装饰类中维护一个被装饰类的引用
  2. 让装饰类有一个共同的父类或者父接口,目的是形成一个装饰连,让装饰类可以互相装饰

使用装饰者模式扩展BufferedReader的功能

package hhu.marthevin.demo0223;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Demo3 {
    public static void main(String[] args) throws IOException{
        File file = new File("F:\\Demo7Server.java");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        BufferedReader lineNumReader = new LineNumBufferedReader(bufferedReader);
        SemiBufferedReader semiReader = new SemiBufferedReader(lineNumReader);
        String line = "";
        while((line=semiReader.readLine())!=null)
        {
            System.out.println(line);
        }
    }
}
class LineNumBufferedReader extends BufferedReader{
    int count = 1;
    BufferedReader bufferedReader;
    public LineNumBufferedReader(BufferedReader bufferedReader)
    {
        super(bufferedReader);
        this.bufferedReader = bufferedReader;
    }
    @Override
    public String readLine() throws IOException {
        // TODO Auto-generated method stub
        String line =  bufferedReader.readLine();
        if(line==null)
        {
            return null;
        }
        line = count+" "+line;
        count++;
        return line;
    }
}

class SemiBufferedReader extends BufferedReader{
    BufferedReader bufferedReader;

    public SemiBufferedReader(BufferedReader bufferedReader)
    {
        super(bufferedReader);
        this.bufferedReader = bufferedReader;
    }
    @Override
    public String readLine() throws IOException {
        // TODO Auto-generated method stub
        String line =  bufferedReader.readLine();
        if(line==null)
        {
            return null;
        }
        return line+";";
    }   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
装饰者模式是一种结构型设计模式,它许在不改变原有对象的情况下,动态地将新功能添加到对象上。在Java中,装饰者模式常用于扩展或修改现有类的功能,同时保持代码的灵活性和可扩展性。 在装饰者模式中,有以下几个角色: 1. 抽象组件(Component):定义了被装饰对象和装饰对象的共同接口。 2. 具体组件(ConcreteComponent):实现了抽象组件接口,是被装饰的对象。 3. 抽象装饰者(Decorator):继承了抽象组件接口,并持有一个抽象组件对象的引用。 4. 具体装饰者(ConcreteDecorator):实现了抽象装饰者接口,负责对具体组件进行装饰。 下面是一个简单的示例,展示了如何使用装饰者模式来扩展一个咖啡店的咖啡功能: ```java // 抽象组件 interface Coffee { String getDescription(); double getCost(); } // 具体组件 class SimpleCoffee implements Coffee { @Override public String getDescription() { return "Simple Coffee"; } @Override public double getCost() { return 1.0; } } // 抽象装饰者 abstract class CoffeeDecorator implements Coffee { protected Coffee decoratedCoffee; public CoffeeDecorator(Coffee decoratedCoffee) { this.decoratedCoffee = decoratedCoffee; } @Override public String getDescription() { return decoratedCoffee.getDescription(); } @Override public double getCost() { return decoratedCoffee.getCost(); } } // 具体装饰者 class MilkDecorator extends CoffeeDecorator { public MilkDecorator(Coffee decoratedCoffee) { super(decoratedCoffee); } @Override public String getDescription() { return super.getDescription() + ", with Milk"; } @Override public double getCost() { return super.getCost() + 0.5; } } class SugarDecorator extends CoffeeDecorator { public SugarDecorator(Coffee decoratedCoffee) { super(decoratedCoffee); } @Override public String getDescription() { return super.getDescription() + ", with Sugar"; } @Override public double getCost() { return super.getCost() + 0.3; } } public class Main { public static void main(String[] args) { // 创建一个简单咖啡对象 Coffee coffee = new SimpleCoffee(); System.out.println(coffee.getDescription() + " $" + coffee.getCost()); // 使用装饰者来添加牛奶和糖 Coffee coffeeWithMilkAndSugar = new SugarDecorator(new MilkDecorator(coffee)); System.out.println(coffeeWithMilkAndSugar.getDescription() + " $" + coffeeWithMilkAndSugar.getCost()); } } ``` 输出结果: ``` Simple Coffee $1.0 Simple Coffee, with Milk, with Sugar $1.8 ``` 在上述示例中,我们定义了一个抽象组件 `Coffee`,具体组件 `SimpleCoffee` 实现了抽象组件接口。然后,我们定义了抽象装饰者 `CoffeeDecorator`,它持有一个抽象组件对象的引用,并实现了抽象组件接口。具体装饰者 `MilkDecorator` 和 `SugarDecorator` 继承了抽象装饰者,并在其基础上添加了额外的功能。 在 `Main` 类中,我们首先创建了一个简单咖啡对象,并输出其描述和价格。然后,我们使用装饰者模式来添加牛奶和糖,并输出装饰后的咖啡描述和价格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值