• 3装饰者模式


    图片来自head first 设计模式,仅供学习之用

    装饰者模式设计的关键之处就是最顶层的接口或抽象类设计,设计的时候要注意保证接口或抽象类的动作要完全,并且要保持稳定

    仿照head first ,以煎饼果子为例,写了个小例子

    package com.company;
    
    abstract class jian_bing{
        protected  String taste;
        abstract public double price();
        abstract public int time();
        abstract public void show();
    }
    abstract class jian_bing_decorator extends jian_bing{
        protected jian_bing jian_bing_instace;
    }
    class beijing_jian_bing extends jian_bing{
    
        @Override
        public void show() {
            System.out.println(taste);
            System.out.println("价格:"+price());
            System.out.println("制作时间:"+time());
        }
    
        public beijing_jian_bing(){
            taste="北京风味煎饼";
        }
        @Override
        public double price() {
            return 5;
        }
    
        @Override
        public int time() {
            return 2;
        }
    }
    class shandong_jian_bing extends jian_bing{
        public shandong_jian_bing(){
            taste="山东风味煎饼";
        }
        @Override
        public double price() {
            return 3;
        }
    
        @Override
        public int time() {
            return 1;
        }
        public void show() {
            System.out.println(taste);
            System.out.println("价格:"+price());
            System.out.println("制作时间:"+time());
        }
    }
    class jian_bing_with_liji extends jian_bing_decorator{
        public jian_bing_with_liji(jian_bing jian_bing_instance){
            this.jian_bing_instace=jian_bing_instance;
            taste=jian_bing_instance.taste+" "+"+里脊";
        }
        @Override
        public double price() {
            return jian_bing_instace.price()+1.5;
        }
    
        @Override
        public void show() {
            System.out.println(taste);
            System.out.println("价格:"+price());
            System.out.println("制作时间:"+time());
        }
    
        @Override
        public int time() {
            return jian_bing_instace.time()+1;
        }
    
    }
    class jian_bing_with_jidan extends jian_bing_decorator{
        @Override
        public void show() {
            System.out.println(taste);
            System.out.println("价格:"+price());
            System.out.println("制作时间:"+time());
        }
    
        public jian_bing_with_jidan(jian_bing jian_bing_instance){
            this.jian_bing_instace=jian_bing_instance;
            taste=jian_bing_instance.taste+" "+"+鸡蛋";
        }
        @Override
        public double price() {
            return jian_bing_instace.price()+1;
        }
    
        @Override
        public int time() {
            return jian_bing_instace.time()+1;
        }
    }
    class DecratorTest{
        public static void test(){
            jian_bing my_jian_bing=new beijing_jian_bing();
            my_jian_bing.show();
            my_jian_bing=new jian_bing_with_jidan(my_jian_bing);
            my_jian_bing.show();
            my_jian_bing=new jian_bing_with_liji(my_jian_bing);
            my_jian_bing.show();
            my_jian_bing=new jian_bing_with_jidan(new jian_bing_with_liji(new shandong_jian_bing()));
            my_jian_bing.show();
        }
    }
  • 相关阅读:
    HDU1575--Tr A(矩阵快速幂)
    HDU 2147--HDU 2147(博弈)--我可能做了假题。。。
    新年第一发--HDU1848--Fibonacci again and again(SG函数)
    【转】你真的会二分查找吗?
    windows与ubuntu双系统的安装
    bestcoder#9--1001--Lotus and Characters
    PC端的混合应用通讯问题
    JS构造函数详解
    JS的prototype的共享机制分析
    使用a标签直接下载图片
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/8780238.html
Copyright © 2020-2023  润新知