国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > java基础 > java装饰者模式怎么用?

java装饰者模式怎么用?

头像

小妮浅浅

2021-02-25 17:45:523924浏览 · 0收藏 · 0评论

1、使用说明

(1)装饰者模式可以带来比继承更加灵活的扩展功能,使用更加方法,可以通过组合不同的装饰者对象来获取具有不同行为状态的多样化的结果。装饰者模式比继承更具良好的扩展性,完美的遵循开闭原则,继承是静态的附加责任,装饰者则是动态的附加责任。

(2)装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

2、实例

public class HelloWorld {
    public static void main(String[] args) {
        //点一份炒饭
        FastFood food = new FriedRice();
        //花费的价格
        System.out.println(food.getDesc() + " " + food.cost() + "元");
 
        System.out.println("========");
 
        //点一份加鸡蛋的炒饭
        FastFood food1 = new FriedRice();
        food1 = new Egg(food1);
        //花费的价格
        System.out.println(food1.getDesc() + " " + food1.cost() + "元");
 
        System.out.println("========");
 
        //点一份加培根的炒面
        FastFood food2 = new FriedNoodles();
        food2 = new Bacon(food2);
        //花费的价格
        System.out.println(food2.getDesc() + " " + food2.cost() + "元");
    }
}
 
// 快餐抽象类
abstract class FastFood {
    private float price;
    private String desc;
 
    public FastFood() {}
 
    public FastFood(float price, String desc) {
        this.price = price;
        this.desc = desc;
    }
 
    public float getPrice() {
        return price;
    }
 
    public void setPrice(float price) {
        this.price = price;
    }
 
    public String getDesc() {
        return desc;
    }
 
    public void setDesc(String desc) {
        this.desc = desc;
    }
 
    // 获取价格
    public abstract float cost();
}
 
// 炒饭
class FriedRice extends FastFood {
    public FriedRice() {
        super(10, "炒饭");
    }
 
    @Override
    public float cost() {
        return getPrice();
    }
}
 
// 炒面
class FriedNoodles extends FastFood {
    public FriedNoodles() {
        super(12, "炒面");
    }
 
    @Override
    public float cost() {
        return getPrice();
    }
}
 
// 配料
abstract class Garnish extends FastFood {
    private FastFood fastFood;
 
    public FastFood getFastFood() {
        return fastFood;
    }
 
    public void setFastFood(FastFood fastFood) {
        this.fastFood = fastFood;
    }
 
    public Garnish(FastFood fastFood, float price, String desc) {
        super(price, desc);
        this.fastFood = fastFood;
    }
}
 
// 鸡蛋配料
class Egg extends Garnish {
    public Egg(FastFood fastFood) {
        super(fastFood, 1, "鸡蛋");
    }
 
    @Override
    public float cost() {
        return getPrice() + getFastFood().getPrice();
    }
 
    @Override
    public String getDesc() {
        return super.getDesc() + getFastFood().getDesc();
    }
}
 
//培根配料
class Bacon extends Garnish {
    public Bacon(FastFood fastFood) {
        super(fastFood,2,"培根");
    }
 
    @Override
    public float cost() {
        return getPrice() + getFastFood().getPrice();
    }
 
    @Override
    public String getDesc() {
        return super.getDesc() + getFastFood().getDesc();
    }
}

以上java装饰者模式的用法,希望能对大家有所帮助。更多Java学习指路:Java基础

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

出差被最讨厌上司夺走的相似电影| 黄瓜视频| 娇妻1~29被部长玩的经过| 《换偶》完整| 男人添女人荫道口视频| 《艳乳欲乱2》免费观看| 免费B站看大片真人电视剧 | 欧美产品和日韩产品的区别| 《法国少女3》高清| 猫为什么要吃老鼠| 苏晴忘穿内裤坐公交车被揉到视频| 成色18K1.8.35MB| 小蜜桃免费观看高清电视剧| 空姐4免费高清完整版观看| 桃色视频| 欧美大妈LOGO大全| 外出5| 9.1短视频| 欧美大片| 免费观看已满十八岁电视剧在线播... | 白发魔女传| 迪拜的女孩| 《晚上准备好纸巾》| 小奶球抖动舞蹈视频| 少妇高潮喷水久久久久久久久| 成色18K.8.35MB蓝莓| 打扑克| 漂亮的售楼秘密2| 豪放女大兵| 美女被咬小头头视频大全| 来吧儿子妈妈是纯还是混| 趁老师睡着破了她的处| 黄金网站9.1免费入口| 中国高清WINDOWS视频| 动物扌桑辶鬲的| 丈夫不在家儿媳想老公的背景故事 | 每日大赛吃瓜爆料每日大赛聚集地| 妈妈がだけの母さん歌词| 后妈的绣感6| 顶到里面了~疼| 小妇人在线观看免费版电视剧