设计模式之装饰模式

一个抽象基类,几个继承基类的具体实现类,一个抽象装饰类继承基类,几个装饰类实现抽象装饰类。

抽象基类如下:

package com.freshbin.pattern.decorate.myexample.component;

/**
 * 抽象基类
 * @author freshbin
 * @date 2019-1-3 17:30:35
 */
public abstract class GameComponent {
	public abstract void playGame();
}

具体实现类:

package com.freshbin.pattern.decorate.myexample.component;

/**
 * 英雄联盟游戏
 * @author freshbin
 * @date 2019-1-3 17:47:45
 */
public class LOLComponent extends GameComponent {

	@Override
	public void playGame() {
		System.out.print("玩英雄联盟游戏");
	}

}
package com.freshbin.pattern.decorate.myexample.component;

/**
 * 泥巴游戏
 * @author freshbin
 * @date 2019-1-3 17:44:21
 */
public class NibaComponent extends GameComponent {

	@Override
	public void playGame() {
		System.out.print("玩泥巴游戏");
	}

}
package com.freshbin.pattern.decorate.myexample.component;

/**
 * 王者荣耀游戏
 * @author freshbin
 * @date 2019-1-3 17:33:40
 */
public class WangzheComponent extends GameComponent {

	@Override
	public void playGame() {
		System.out.print("玩王者荣耀游戏");
	}

}

装饰类:

package com.freshbin.pattern.decorate.myexample.decorator;

import com.freshbin.pattern.decorate.myexample.component.GameComponent;

/**
 * 装饰者类
 * @author freshbin
 * @date 2019-1-3 17:35:09
 */
public abstract class Decorator extends GameComponent {
	protected GameComponent gameComponent;
	
	public void setGameComponent(GameComponent gameComponent) {
		this.gameComponent = gameComponent;
	}
	
	@Override
	public void playGame() {
		if(gameComponent != null) {
			gameComponent.playGame();
		}
	}
}

装饰实现类:

package com.freshbin.pattern.decorate.myexample.decorator;

/**
 * 手柄装饰类
 * @author freshbin
 * @date 2019-1-3 17:45:18
 */
public class HandleDecorator extends Decorator {
	
	@Override
	public void playGame() {
		System.out.print("手柄");
		super.playGame();
	}
}
package com.freshbin.pattern.decorate.myexample.decorator;

/**
 * 键盘装饰类
 * @author freshbin
 * @date 2019-1-3 17:49:12
 */
public class KeyBoardDecorator extends Decorator {
	
	@Override
	public void playGame() {
		System.out.print("键盘");
		super.playGame();
	}
}
package com.freshbin.pattern.decorate.myexample.decorator;

/**
 * 鼠标装饰类
 * @author freshbin
 * @date 2019-1-3 17:48:15
 */
public class MouseDecorator extends Decorator {
	
	@Override
	public void playGame() {
		System.out.print("鼠标");
		super.playGame();
	}
}
package com.freshbin.pattern.decorate.myexample.decorator;

/**
 * 棍子装饰类
 * @author freshbin
 * @date 2019-1-3 17:37:43
 */
public class StickDecorator extends Decorator {
	
	@Override
	public void playGame() {
		System.out.print("棍子");
		super.playGame();
	}
}

主类:

package com.freshbin.pattern.decorate.myexample;

import com.freshbin.pattern.decorate.myexample.component.GameComponent;
import com.freshbin.pattern.decorate.myexample.component.LOLComponent;
import com.freshbin.pattern.decorate.myexample.component.NibaComponent;
import com.freshbin.pattern.decorate.myexample.component.WangzheComponent;
import com.freshbin.pattern.decorate.myexample.decorator.Decorator;
import com.freshbin.pattern.decorate.myexample.decorator.HandleDecorator;
import com.freshbin.pattern.decorate.myexample.decorator.KeyBoardDecorator;
import com.freshbin.pattern.decorate.myexample.decorator.MouseDecorator;
import com.freshbin.pattern.decorate.myexample.decorator.StickDecorator;

/**
 * 装饰者模式
 * @author freshbin
 * @date 2019-1-3 17:18:45
 */
public class DecorateMain {
	
	public static void main(String[] args) {
		
		System.out.print("freshbin用");
		GameComponent gameComponent = new LOLComponent();
		Decorator mouse = new MouseDecorator();
		Decorator keyBoard = new KeyBoardDecorator();
		
		mouse.setGameComponent(gameComponent);
		keyBoard.setGameComponent(mouse);
		keyBoard.playGame();
		
		System.out.println();
		System.out.println("=====================");
		
		System.out.print("小明用");
		Decorator stick = new StickDecorator();
		gameComponent = new NibaComponent();
		stick.setGameComponent(gameComponent);
		stick.playGame();
		
		System.out.println();
		System.out.println("=======================");
		
		System.out.print("后来,小明发现了新大陆,开始用");
		gameComponent = new WangzheComponent();
		Decorator handler = new HandleDecorator();
		handler.setGameComponent(gameComponent);
		handler.playGame();
		
		System.out.println();
		System.out.println("=======================");
		
		System.out.print("freshbin看着觉得很好玩,也跟着用");
		handler.playGame();
	}
	
}

效果图:

github地址:https://github.com/freshbin/designPattern

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值