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  包装其他输入输出流  能够提升读写速度。


     

  • 相关阅读:
    Android开源库
    银行卡的数字检測
    hdu4941 Magical Forest
    android之检測是否有网络
    在Oracle数据库中使用NFS,怎样调优?
    centos+nginx+php-fpm+php include fastcgi_params php页面能訪问但空白,被fastcgi_params与fastcgi.conf害慘了
    漫谈反射
    Android 四大组件学习之BroadcastReceiver二
    【LeetCode】two num 利用comparable接口 对对象进行排序
    扩展功能==继承?
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10952617.html
Copyright © 2011-2022 走看看