设计模式三之装饰者模式

来源:互联网 发布:xss攻击防御 php 编辑:程序博客网 时间:2024/05/16 15:14

注:本文主要思想来自《HeadFirst 设计模式》

定义:动态地将责任附加到对象上,若要扩展对象,装饰者模式提供了比继承更弹性的替代方案

->遵循开放-关闭原则(对拓展开放,对修改关闭  即不能修改原先的代码进行拓展)


我这里举咸蛋超人的例子说明:

怪物降临,咸蛋超人从天而降。然而此时的咸蛋超人是刚进新手村的,所以战斗力只有5

public interface Superman {String Weapon();     //武器int FightCapacity();//战斗力}
咸蛋超人类,继承了Superman接口
public class Ultraman implements Superman{String weapon = "裤衩"; //刚进新手村,身上只有一件绑定衣服(裤衩)int fight = 5;   //战斗力只有五的public String Weapon(){return weapon;}public int FightCapacity(){return fight;}}
在主类中运行
public class Test {public static void main(String[] args) {Superman man = new Ultraman();man = new Stealth(man);man = new LaserGun(man);System.out.println("现在装备有:"+man.Weapon());System.out.println("现在战斗力有:"+man.FightCapacity());}}

输出为:

现在装备有:裤衩

现在战斗力有:5


于是乎。。。超人刚登场就被怪兽打跑了,但在科学家的思考下决定给超人装备武器,这就是我们的装饰者

科学家在考虑了超人本身是不能拆之后,决定为他添加武器隐形衣镭射枪

他们定制了一个武器入口,专门用于为超人穿戴武器   这就是 抽象装饰者

public abstract class WeaponDecorator implements Superman{ //定义武器类抽象装饰者//定义武器装饰方法public abstract String Weapon();//定义装备了武器后的增加战斗力方法public abstract int FightCapacity();}
有了这个穿戴武器的接口我们就可以穿戴强大的武器(具体装饰者)
具体装饰者 隐形衣类

public class Stealth extends WeaponDecorator{  //武器->隐形衣Superman superman;String weapon = "隐形衣"; //这是件隐形衣int fight = 100;   //隐形+100public Stealth(Superman superman){this.superman = superman;}public String Weapon(){return weapon+","+superman.Weapon();}public int FightCapacity(){return fight+superman.FightCapacity();}}
具体装饰者 镭射枪类
public class LaserGun extends WeaponDecorator{  //武器->镭射枪Superman superman;String weapon = "镭射枪"; //这是把镭射枪int fight = 50;   //隐形+100public LaserGun(Superman superman){this.superman = superman;}public String Weapon(){return weapon+","+superman.Weapon();}public int FightCapacity(){return fight+superman.FightCapacity();}}
科学家总于把全部武器生产好了,我们可以为超人装备武器了,在主类中
public class Test {public static void main(String[] args) {Superman man = new Ultraman();man = new Stealth(man);man = new LaserGun(man);System.out.println("现在装备有:"+man.Weapon());System.out.println("现在战斗力有:"+man.FightCapacity());}}
输出为:

现在装备有:镭射枪,隐形衣,裤衩
现在战斗力有:155



在科学家的帮忙下,咸蛋超人战斗力剧增,很快就帮怪兽消灭了,地球再次得到了和平-------》》》》》》》》》》》》》》》》》》》》

体会:开放-关闭原则 充分体现了组合-委托的优势,摆脱过度依赖继承,增加程序的弹性

5 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 钱被银行冻结了怎么办 百度云账号密码忘了怎么办 微信钱包忘记密码了怎么办 word文档打开文件出错怎么办 有盘文件删不了怎么办 u盘文档严重损坏怎么办 wps文档打开是乱码怎么办 九游3083网资金冻结怎么办 阴阳师九游版禁止部分玩法怎么办 夜神模拟器游戏打不开怎么办 九游代金券锁定怎么办 被娱乐天地骗了怎么办 win8更新失败无法开机怎么办 安装英雄联盟文件损坏怎么办 电脑玩lol运行内存不足怎么办 守望先锋账号冻结了怎么办 守望先锋服务器发生意外错误怎么办 在先锋社保缺一年上学怎么办 lol更新后反应很慢怎么办 电脑跳舞毯不正常电脑游戏怎么办 PS中缺失的字体怎么办 黑板墙不想要了怎么办 淘宝代练打坏了怎么办 绝地求生与ipad不兼容怎么办 小米手机玩绝地求生卡怎么办 绝地求生服务器目前非常繁忙怎么办 玩绝地求生手机发烫怎么办 绝地求生刺激战场延迟高怎么办 怀孕八个半月打喷嚏头疼怎么办 20岁打喷嚏漏尿怎么办 鼻炎犯了不停打喷嚏怎么办 鼻炎犯了不停打喷嚏流鼻涕怎么办 感冒鼻痒怎么办小窍门 腰扭了屁股也疼怎么办 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办 电脑ip地址错误不能上网怎么办 修改了注册表电脑无法启动怎么办 香水喷到衣服上有印怎么办 家里一股猫的味道怎么办