zoukankan      html  css  js  c++  java
  • java_IO_装饰器

    装饰器模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

    这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

     1 package ioStudy;
     2 
     3 
     4 /**
     5  * 装饰器模式
     6  * 1.抽象接口
     7  * 2.具体对象
     8  * 3.抽象装饰者
     9  * 4.具体装饰者
    10  * */
    11 public class DecorateStudy1 {
    12     
    13     public static void main(String[] args) {
    14         Drink coffee = new Coffee();
    15         
    16         Decorate milk = new Milk(coffee);
    17         System.out.println(milk.info()+"===>"+milk.cost());
    18         
    19         Decorate sugar = new Sugar(coffee);
    20         System.out.println(sugar.info()+"===>"+sugar.cost());
    21         
    22         milk = new Milk(sugar);
    23         System.out.println(milk.info()+"===>"+milk.cost());
    24     }
    25 }
    26 
    27 
    28 interface Drink {
    29     String info();
    30     int cost();
    31 }
    32 
    33 class Coffee implements Drink{
    34     
    35     private String name = "原味咖啡";
    36     private int price = 10;
    37 
    38     @Override
    39     public String info() {
    40         // TODO Auto-generated method stub
    41         return name;
    42     }
    43 
    44     @Override
    45     public int cost() {
    46         // TODO Auto-generated method stub
    47         return price;
    48     }
    49 }
    50 
    51 abstract class Decorate implements Drink {
    52     Drink drink;
    53     public Decorate(Drink drink) {
    54         this.drink = drink;
    55     }
    56     
    57     public String info() {
    58         return drink.info();
    59     }
    60     
    61     public int cost() {
    62         return drink.cost();
    63     }
    64 }
    65 
    66 class Milk extends Decorate{
    67 
    68     public Milk(Drink drink) {
    69         super(drink);
    70     }
    71     
    72     public String info() {
    73         return super.drink.info() + "加入了牛奶";
    74     }
    75     
    76     public int cost() {
    77         return super.drink.cost()*4;
    78     }
    79 }
    80 
    81 class Sugar extends Decorate{
    82 
    83     public Sugar(Drink drink) {
    84         super(drink);
    85     }
    86     
    87     public String info() {
    88         return super.drink.info() + "加入了方糖";
    89     }
    90     
    91     public int cost() {
    92         return super.drink.cost()*3;
    93     }
    94 }

    用BufferedInputStream  BufferedOutputStream  BufferedReader  BufferWriter  包装其他输入输出流  能够提升读写速度。


     

  • 相关阅读:
    关于_OPENMP预编译
    Java FlameGraph 火焰图
    java的-cp和-Djava.library.path
    maven依赖包和依赖仓库(2)
    opencv读取图像输入到tensorflow模型中进行运算【cpp】
    NiftyNet 项目了解
    windows编译tensorflow c++库
    关于Tensorflow 的数据读取环节
    Itunes connect上传应用视频 app preview时遇到“无法载入文件”的问题
    Unity 扩展编辑器
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10952617.html
Copyright © 2011-2022 走看看