设计模式之——装饰者模式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 设计模式之——装饰者模式

设计模式之——装饰者模式

 2017/10/23 0:47:02  chou_qi  程序员俱乐部  我要评论(0)
  • 摘要:装饰者模式要点:1.装饰着与被装饰者拥有共同的超类2.继承的目的是实现类型的继承(从而实现行为的扩展)3.行为扩展(最终目的)场景:拥有主体类型或业务逻辑,但又具有个性化的处理场景举例:不同的咖啡不同的价格,但是计算价格的模式是一样的代码如下/***超类咖啡*@authorjohn**/publicabstractclassCoffe{//价格publicabstractdoublecost();}/***摩卡咖啡(被装饰者
  • 标签:模式 设计 设计模式
装饰者模式要点:

      1. 装饰着与被装饰者拥有共同的超类
      2. 继承的目的是实现类型的继承(从而实现行为的扩展)
      3. 行为扩展(最终目的)

场景: 拥有主体类型或业务逻辑,但又具有个性化的处理场景


举例: 不同的咖啡不同的价格,但是计算价格的模式是一样的

代码如下

class="java">
/**
 * 超类 咖啡
 * @author john
 *
 */
public abstract class Coffe {
    //价格
	public abstract double cost();
}

/**
 * 摩卡咖啡(被装饰者)
 * @author john
 *
 */
public class MokaCoffe extends Coffe {

	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 2.0;
	}

}

/**
 * Nes咖啡 被装饰者
 * @author john
 *
 */
public class NesCoffe extends Coffe {

	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 3.0;
	}

}

/**
 * 调料组件(装饰者组件)
 * @author john
 *
 */
public abstract class CompentDecorate extends Coffe {

	@Override
	public abstract double cost();

}

/**
 * 奶油调料(装饰者)
 * @author john
 *
 */
public class MilkCondiment extends CompentDecorate {
    private Coffe coffe;
    
    public MilkCondiment(){
    	
    }
    
    public MilkCondiment(Coffe coffe){
    	this.coffe = coffe;
    }
	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 0.2+coffe.cost();
	}

}

/**
 * 糖调料 (装饰者)
 * @author john
 *
 */
public class sugarCondiment extends CompentDecorate {
	private Coffe coffe;
	
	public sugarCondiment(){
		
	}
	
    public sugarCondiment(Coffe coffe){
    	this.coffe = coffe;
    }
    
	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 0.1+coffe.cost();
	}

}

public class Test {
	public static void main(String[] args){
		//咖啡 2.0
		Coffe mokaCoffe = new MokaCoffe();
		//扩展行为(价格)
		
		//加牛奶的咖啡 0.2
		mokaCoffe = new MilkCondiment(mokaCoffe);
		
		System.out.println(mokaCoffe.cost());
		
		//加糖的咖啡 0.1
		mokaCoffe = new sugarCondiment(mokaCoffe);
		
		System.out.println(mokaCoffe.cost());
	}
}



//运行结果:
[img]

[/img]
  • 大小: 13.2 KB
  • 查看图片附件
上一篇: 连线:揭秘特斯拉制造工厂神秘的二楼 下一篇: 没有下一篇了!
发表评论
用户名: 匿名