zoukankan      html  css  js  c++  java
  • 装饰器模式

    package com.sxt.io;
    /**
     * 模拟咖啡
     * 1、抽象组件:需要装饰的抽象对象(接口或抽象父类)
     * 2、具体组件:需要装饰的对象
     * 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
     * 4、具体装饰类:被装饰的对象
     * @author TW
     *
     */
    public class DecorateTest02 {
        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());        
            milk =new Milk(suger);//装饰
            System.out.println(milk.info()+"-->"+milk.cost());
        }
    }
    //抽象组件
    interface Drink{
        double cost(); //费用
        String info(); //说明
    }
    //具体组件
    class Coffee 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 this.drink.cost();
        }
    
        @Override
        public String info() {
            return this.drink.info();
        }    
    }
    
    //具体装饰类
    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()+"加入了蔗糖";
        }    
    }
  • 相关阅读:
    面向对象--封装
    面向对象--多态
    面向对象编程
    类的特殊成员
    新式类 VS 经典类
    python类的继承
    python析构函数
    类的公有属性
    (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识
    (转)JAVA AJAX教程第一章-初始AJAX
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/11307381.html
Copyright © 2011-2022 走看看