设计模式--装饰模式

来源:互联网 发布:淘宝收入排行榜 编辑:程序博客网 时间:2024/06/06 03:27
复习设计模式--装饰模式
装饰模式 在不修改已经存在的类的情况下,动态的添加新的功能,实现即插即用,开放关闭原则

public interface Man {public void killMonster();}public class BatMan implements Man {public String name;public BatMan(String name) {this.name = name;}@Overridepublic void killMonster() {System.out.println("蝙蝠侠" + name + "开始打怪兽!");}}public class XMan implements Man {@Overridepublic void killMonster() {System.out.println("X-Man 开始打怪兽!");}}//Decorator 添加武器 进行油漆装饰public abstract class Weapon implements Man {protected Man man;public void setMan(Man man) {this.man = man;}public Man getMan() {return man;}@Overridepublic void killMonster() {man.killMonster();}}public class Sword extends Weapon {private String swordName;public Sword(String swordName) {this.swordName = swordName;}@Overridepublic void killMonster() {System.out.println("获取一把剑,剑名:" + swordName);super.killMonster();}}public class Gun extends Weapon {public String gunName;private int bulletCount = 10;public Gun(String gunName) {this.gunName = gunName;}@Overridepublic void killMonster() {System.out.println("发放武器 " + gunName + ",装有子弹" + bulletCount + "发!");super.killMonster();}}public class GiveBullet extends Weapon {private int bulletCount;public GiveBullet(int bulletCount) {this.bulletCount = bulletCount;}@Overridepublic void killMonster() {System.out.println("额外发放子弹" + bulletCount + "发!");super.killMonster();}}public class DecoratorTest {public static void main(String[] args) {Man man = new BatMan("Wayne");//Man man = new XMan();//man.killMonster();Weapon weapon = new Gun("AK");//weapon.setMan(man);//weapon.killMonster();Weapon bullet = new GiveBullet(100);Weapon sword = new Sword("莫邪");//添加子弹bullet.setMan(man);//添加gunweapon.setMan(bullet);//添加剑sword.setMan(weapon);sword.killMonster();}}


0 0
原创粉丝点击