• IO—装饰设计模式


    四部分组成:
    1、抽象组件:需装饰的抽象对象(接口或抽象父类)
    2、具体组件:需要装饰的对象
    3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
    4、具体装饰类:被装饰的对象

    示例:模拟咖啡

    public class Decorate02 {
    	public static void main(String[] args) {
    		Drink coffee=new Coffee();
    		
    		Drink suger=new Suger(coffee);//装饰
    		System.out.println(suger.info()+"--->"+suger.cost());
    		
    		Drink milk=new Milk(coffee);//装饰
    		System.out.println(milk.info()+"--->"+milk.cost());
    		
    		Drink q=new Milk(suger);//装饰
    		System.out.println(q.info()+"--->"+q.cost());
    	}
    }
    //1、抽象组件
    interface Drink{
    	double cost();
    	String info();
    }
    //2、具体组件
    class Coffee implements Drink{
    	private String name="原味咖啡";
    	@Override
    	public double cost() {
    		return 10;
    	}
    
    	@Override
    	public String info() {
    		return name;
    	}
    }
    //3、抽象装饰类
    abstract class Decorate implements Drink{
    	//对抽象组件的引用
    	private Drink drink;
    	
    	public Decorate(Drink drink) {
    		this.drink = drink;
    	}
    
    	@Override
    	public double cost() {
    		return this.drink.cost();
    	}
    
    	@Override
    	public String info() {
    		return this.drink.info();
    	}
    	
    }
    
    //4、具体装饰类
    class Milk extends Decorate{
    
    	public Milk(Drink drink) {
    		super(drink);
    	}
    
    	@Override
    	public double cost() {
    		return super.cost()*4;
    	}
    
    	@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()+"加入了蔗糖";
    	}
    }
    

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    java 字符串转int
    java读取properties文件
    Mysql表复制及备份还原
    HTTP协议
    PHP 通过随机数获得ASCII 值返回字符。
    PHP 解决未定义变量报错
    axure 7.0 7.0.0.3142 简体中文版(附汉化包注册)
    SQL Server 2008 新增T-SQL 简写语法
    Git Flow流程
    用SourceTree轻巧Git项目图解
  • 原文地址:https://www.cnblogs.com/firecode7/p/16120459.html
Copyright © 2020-2023  润新知