读书人

常见设计形式之【装饰模式】

发布时间: 2012-09-18 16:21:42 作者: rapoo

常见设计模式之【装饰模式】

装饰模式:顾名思义就是跟他加层层外套,或者说是给一个实体增加更多的形容词

请看demo让你一目了然,呵呵....你懂滴

package Decorator;/** *@Description: 装饰模式 *@author Potter    *@date 2012-9-10 下午05:35:07 *@version V1.0    */public class App {/** * @param args */public static void main(String[] args) {Coffee coffee=new Tang(new Nai(new NaTie()));System.out.println("coffee's cost="+coffee.getCost());System.out.println("coffee's message="+coffee.getMessage());}}

coffee类:

package Decorator;/** *@Description: 咖啡类 *@author Potter    *@date 2012-9-10 下午05:21:35 *@version V1.0    */public interface Coffee {public float getCost();public String getMessage();}

装饰核心类:

package Decorator;/** *@Description:装饰模式核心  *@author Potter    *@date 2012-9-10 下午05:21:14 *@version V1.0    */public class Decorator implements Coffee{protected Coffee coffee;public Decorator(Coffee coffee){this.coffee=coffee;}@Overridepublic float getCost() {return coffee.getCost();}@Overridepublic String getMessage() {return coffee.getMessage();}}

实体蓝山咖啡类:

package Decorator;/** *@Description: 蓝色咖啡 *@author Potter    *@date 2012-9-10 下午05:25:46 *@version V1.0    */public class LanShan implements Coffee {@Overridepublic float getCost() {return 20f;}@Overridepublic String getMessage() {return "蓝山咖啡";}}

实体拿铁咖啡类:

package Decorator;/** *@Description: 拿铁咖啡 *@author Potter    *@date 2012-9-10 下午05:23:53 *@version V1.0    */public class NaTie implements Coffee {@Overridepublic float getCost() {return 10f;}@Overridepublic String getMessage() {return "拿铁咖啡";}}


装饰类奶:

package Decorator;/** *@Description:奶  *@author Potter    *@date 2012-9-10 下午05:33:13 *@version V1.0    */public class Nai extends Decorator {public Nai(Coffee coffee) {super(coffee);}@Overridepublic float getCost() {return super.getCost()+5;}@Overridepublic String getMessage() {return "加奶的"+super.getMessage();}}


装饰类糖:

package Decorator;/** *@Description: 糖 *@author Potter    *@date 2012-9-10 下午05:30:49 *@version V1.0    */public class Tang extends Decorator {public Tang(Coffee coffee) {super(coffee);}@Overridepublic String getMessage() {return "加糖的"+super.getMessage();}}

运行结果:

coffee's cost=15.0
coffee's message=加糖加奶的拿铁咖啡


呵呵~ 很容易理解吧!



读书人网 >软件开发

热点推荐