博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式--装饰图案
阅读量:5806 次
发布时间:2019-06-18

本文共 1858 字,大约阅读时间需要 6 分钟。

回顾设计模式--装饰图案
装饰图案 如果没有改变的情况下现有的类,动态添加新功能。即插即用,开闭原则

public interface Man {		public void killMonster();}public class BatMan implements Man {		public String name;		public BatMan(String name) {		this.name = name;	}		@Override	public void killMonster() {				System.out.println("蝙蝠侠" + name + "開始打怪兽!");			}}public class XMan implements Man {	@Override	public 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;	}		@Override	public void killMonster() {		man.killMonster();	}	}public class Sword extends Weapon {		private String swordName;		public Sword(String swordName) {		this.swordName = swordName;	}		@Override	public 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;	}		@Override	public void killMonster() {		System.out.println("发放武器 " + gunName + ",装有子弹" + bulletCount + "发!

"); super.killMonster(); } } public class GiveBullet extends Weapon { private int bulletCount; public GiveBullet(int bulletCount) { this.bulletCount = bulletCount; } @Override public 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); //加入gun weapon.setMan(bullet); //加入剑 sword.setMan(weapon); sword.killMonster(); } }

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
【HDU 1228】A + B
查看>>
CentOS 7搭建SVN服务器
查看>>
Floyd最短路算法
查看>>
Class.forName(String name)方法,到底会触发那个类加载器进行类加载行为?
查看>>
CentOS 6.6 FTP install
查看>>
C#------判断btye[]是否为空
查看>>
图解Ajax工作原理
查看>>
oracle导入导出小记
查看>>
聊一聊log4j2配置文件log4j2.xml
查看>>
NeHe OpenGL教程 第七课:光照和键盘
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>