zoukankan      html  css  js  c++  java
  • 设计模式--装饰图案

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

    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(); } }



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

  • 相关阅读:
    [Ramda] Create a Query String from an Object using Ramda's toPairs function
    UVA 10285 Longest Run on a Snowboard(记忆化搜索)
    为什么鲍尔默现在说要辞职?
    c++中经常需要访问对象中的成员的三种方式
    【实用技术】DreamWeaver常用快捷键
    Objective-C中NSString和NSMutableString的基本用法
    《数据通信与网络》笔记--IPSec
    最小费用最大流模板 poj 2159 模板水题
    UVa 10192: Vacation
    C++按值和按址传递对象的思考和优化
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4841017.html
Copyright © 2011-2022 走看看