`
zhy584520
  • 浏览: 181059 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

设计模式-----装饰模式学习

阅读更多

最近在看Head First设计模式,比较爽,通俗易懂,过了个眼隐,赶紧动手来写一个自己的装饰模式,以便学以至用。

1。建立抽象动物类,猪肉类实现动物类,鸭肉实现动物类,

2。建立抽象动物处理类,并实现具体动物处理类(暂时就先切,煮吧)

代码如下:

   1。动物抽象类:

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:23:51
 *@version v1.0
 **/
public abstract class Animal {

	private String description;
	
	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public abstract int cost();
}

 2.猪肉实现类(extends Animal)

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:28:15
 *@version v1.0
 **/
public class PigAnimal extends Animal {

	public PigAnimal()
	{
		super.setDescription("我买了一块猪肉(价格20块)!");
	}
	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return 20;
	}

}

 3。鸭肉实现类(extends Animal)

    

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:27:17
 *@version v1.0
 **/
public class DuckAnimal extends Animal {

	public DuckAnimal()
	{
		super.setDescription("我买了一块鸭肉(价格12元)");
	}
	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return 12;
	}

}

 

4.动物处理抽象类(extends Animal)

  

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:30:00
 *@version v1.0
 **/
public abstract class ProcessAnimal extends Animal {

	public abstract String getDescription();

}

 

5。切处理类(extends ProcessAnimal)

 

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:31:36
 *@version v1.0
 **/
public class CutProcessAnimal extends ProcessAnimal {

	private Animal animal;
	
	public  CutProcessAnimal(Animal animal) {
		this.animal=animal;
	}
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return animal.getDescription()+"+切一下需要加收一块钱!";
	}

	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return animal.cost()+1;
	}

}

 

6.煮处理类(extends ProcessAnimal)

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:34:59
 *@version v1.0
 **/
public class CookProcessAnimal extends ProcessAnimal {

	private Animal animal;
	
	public  CookProcessAnimal(Animal animal) {
		this.animal=animal;
	}


	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return animal.getDescription()+"+煮一下需要加收5元!";
	}

	@Override
	public int cost() {
		// TODO Auto-generated method stub
		return animal.cost()+5;
	}

}

 7.测试类:

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-6 下午02:36:26
 *@version v1.0
 **/
public class Test {

	/**
	 * main 方法
	 * <p>方法说明:</p>
	 * @param args
	 * @return void
	 * @author liudonggan Email:ldg123456@sina.com
	 * @date 2011-7-6 下午02:36:26
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animal=new PigAnimal();
		System.out.println(animal.getDescription());
		System.out.println("我需要切切,正在切....");
		animal=new CutProcessAnimal(animal);
		System.out.println(animal.getDescription());
		System.out.println("合计:"+animal.cost()+"元");
		System.out.println("我需要煮熟了,正在煮....");
		animal=new CookProcessAnimal(animal);
		System.out.println(animal.getDescription());
		System.out.println("合计:"+animal.cost()+"元");
		
	}

}

 8。代码运行结果如下:

我买了一块猪肉(价格20块)!
我需要切切,正在切....
我买了一块猪肉(价格20块)!+切一下需要加收一块钱!
合计:21元
我需要煮熟了,正在煮....
我买了一块猪肉(价格20块)!+切一下需要加收一块钱!+煮一下需要加收5元!
合计:26元

 

 

到此为止已经完成了一个简单的装饰模式,希望以后在项目中应用自如。Fighting....

2
1
分享到:
评论

相关推荐

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx

    《C++20设计模式》学习笔记-第9章装饰器模式-配套代码

    《C++20设计模式》学习笔记-第9章装饰器模式-配套代码

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    设计模式-装饰者

    关于C++版本的装饰者设计模式, 供大家学习借鉴, 有问题一起讨论~

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    研磨设计模式-part2

    也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...

    研磨设计模式-part4

    也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...

    研磨设计模式-part3

    也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...

    装饰者模式 - PHP版

    装饰者模式,php版本的,学习设计模式写的

    Java 经典设计模式讲解以及项目实战

    9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...

    23种设计模式 - 各种模式的学习

    23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) ...

    设计模式C++学习之装饰模式(Decorator)

    设计模式C++学习之装饰模式(Decorator)

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    第一节 设计模式:学习顺序 第二节 简单工厂模式 第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第六节 外观模式 第七节 模板模式 第八节 组合模式 第九节 代理模式 第十节 命令模式 第十一节 观察者...

    设计模式精解-掌握设计模式

    本书适用于学习面向中对象设计和设计模式的学生、程序员以及从事软件开发的人士。\r\n 本书要点包括:\r\n 对象、封装和继承的新观点。\r\n 设计模式的思想、起源及其在软件设计学科中的应用。\r\n 模式基础以及使用...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    设计模式装饰模式PPT学习教案.pptx

    设计模式装饰模式PPT学习教案.pptx

    尚硅谷设计模式源码笔记课件.zip

    2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...

    JAVA设计模式学习12——装饰器模式

    NULL 博文链接:https://alaric.iteye.com/blog/1911949

    java设计模式学习文档.pdf

    培养学生掌握简单工厂模式、工厂方法模式、单例模式、原型模式、桥接模式、适配器模式、装饰模式、代理模式、命令模式、观察者模式等常用设计模式的设计思想,并掌握在实际软件工程领域中的运用,能够把所学的原理...

    设计模式之装饰模式

    设计模式之装饰模式实例,你值得拥有,好好学习,天天向上

Global site tag (gtag.js) - Google Analytics