zoukankan      html  css  js  c++  java
  • Java IO 流 -- 设计模式:装饰设计模式

    在java IO 流中我们经常看到这样的写法:

    ObjectOutputStream oos = new ObjectOutputStream(
    				new BufferedOutputStream(new FileOutputStream("obj.ser")));
    

    这其实就是IO流使用装饰设计模式,装饰设计模式通常包含:
    1、抽象的组件(抽象类或接口)
    2、具体的组件:需要装饰的对象
    3、抽象的装饰:包含了对抽象组件的引用以及装饰着共同的方法
    4、具体的装饰类:被装饰的对象
    下面模拟咖啡用装饰模式,直接上完整代码:

    package com.xzlf.io;
    
    /**
     * 模拟咖啡
     * 1、抽象的组件(抽象类或接口)
     * 2、具体的组件:需要装饰的对象
     * 3、抽象的装饰:包含了对抽象组件的引用以及装饰着共同的方法
     * 4、具体的装饰类:被装饰的对象
     * @author xzlf
     *
     */
    public class DecorateTest02 {
    	public static void main(String[] args) {
    		Drink coffe = new Coffe();
    		Drink milk = new Milk(coffe);
    		System.out.println(milk.info() + "-->" + milk.cost());
    		Drink suger = new Suger(coffe);
    		System.out.println(suger.info() + "-->" +suger.cost());
    		suger = new Suger(milk);
    		System.out.println(suger.info() + "-->" +suger.cost());
    	}
    }
    
    /* 抽象组件 */
    interface Drink{
    	double cost();// 费用
    	String info();// 说明
    	
    }
    
    /* 具体组件 */
    class Coffe implements Drink{
    	private String name = "原味咖啡";
    
    	@Override
    	public double cost() {
    		return 10;
    	}
    
    	@Override
    	public String info() {
    		return name;
    	}
    	
    }
    
    /* 抽象的装饰类 */
    abstract class Decorate implements Drink{
    	private Drink drink;
    	
    	public Decorate(Drink drink) {
    		this.drink = drink;
    	}
    	
    	@Override
    	public double cost() {
    		return drink.cost();
    	}
    	
    	@Override
    	public String info() {
    		return drink.info();
    	}
    }
    
    /* 具体的装饰类 */
    class Milk extends Decorate{
    
    	public Milk(Drink drink) {
    		super(drink);
    	}
    	
    	@Override
    	public double cost() {
    		return super.cost()*10;
    	}
    	
    	@Override
    	public String info() {
    		return super.info() + "加入了牛奶";
    	}
    }
    
    /* 具体的装饰类 */
    class Suger extends Decorate{
    
    	public Suger(Drink drink) {
    		super(drink);
    	}
    	
    	@Override
    	public double cost() {
    		return super.cost()*2;
    	}
    	
    	@Override
    	public String info() {
    		return super.info() + "加入了蔗糖";
    	}
    }
    

    运行测试:
    在这里插入图片描述

    重视基础,才能走的更远。
  • 相关阅读:
    springcloud
    redis实现Session
    深入理解Dip Ioc Di以及Ioc容器
    SQL Server 索引维护 索引碎片 填充因子
    SQL Server 非聚集索引的覆盖,连接交叉和过滤
    SQL Server 索引 聚集索引、非聚集索引、堆
    T-SQL存储过程
    T-SQl 批处理
    T-SQl 游标
    T-SQL 控制流语句
  • 原文地址:https://www.cnblogs.com/xzlf/p/12681533.html
Copyright © 2011-2022 走看看