`
zhy584520
  • 浏览: 183542 次
  • 性别: 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
分享到:
评论

相关推荐

    C++设计模式--基于Qt4开源跨平台开发框架

    通过学习《C++设计模式--基于Qt4开源跨平台开发框架》,开发者不仅可以掌握设计模式的本质和应用场景,还能深入理解Qt4框架的强大功能。结合两者,能够提高代码质量,降低维护成本,同时实现高效且可靠的跨平台应用...

    设计模式-Java语言中的应用

    通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    通过学习和应用这些设计模式,开发者可以更好地组织代码,提高代码的可扩展性和可维护性。QT4的API设计也鼓励了这些模式的使用,使得开发者能够构建出高效、可复用的跨平台应用程序。对于初学者,理解这些模式并将其...

    java设计模式---诙谐易懂版

    总结来说,设计模式是软件开发中的重要工具,通过学习和运用不同的设计模式和设计原则,可以帮助开发者更好地解决编程中的各种问题,提升代码质量和团队协作效率。在Java开发中,正确理解和应用这些模式和原则,对于...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...

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

    在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...

    Java设计模式----通俗易懂版

    通过这个"通俗易懂版"的学习资源,你将能够深入理解每种设计模式的原理,掌握如何在实际项目中应用它们,提升代码的可维护性和复用性。阅读《设计模式_20090916.pdf》文档,结合具体的代码示例,相信你将能够更好地...

    软件设计模式--填空题+简答题(复习7).rar

    2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    JAVA设计模式-chm版

    三、学习设计模式的方法: 1. 阅读经典书籍,如《设计模式:可复用面向对象软件的基础》(GOF设计模式)。 2. 实践编程,将所学应用到实际项目中。 3. 分析和重构现有代码,找出并应用设计模式。 4. 参与讨论和分享...

    26种设计模式-----pdf

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板。这个压缩包文件名为"26种...通过深入学习和实践这些设计模式,开发者可以进一步提升自己的编程技能,更好地应对各种复杂的软件设计挑战。

    设计模式-王翔 全本

    在阅读《设计模式》.pdf的过程中,读者将有机会学习到如何运用这些模式来提升软件设计的质量,提高代码的可读性和可维护性。这不仅有助于个人技能的提升,也有利于团队间的沟通和协作,因为设计模式提供了一种共同的...

    设计模式-华工课件 设计模式

    华工的课件可能会涵盖以上所述的设计模式,并结合实际案例进行深入讲解,以帮助学习者理解和掌握这些模式。软件测试-2009-11.rar文件可能是课程中的另一部分,可能涉及软件测试理论与实践,与设计模式相辅相成,共同...

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

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

    Java 中的设计模式 - jdon

    《Java中的设计模式 - jdon》是一本深入探讨Java编程中设计模式的电子书,它主要聚焦于如何在实际开发中应用和理解这些经典的设计原则和模式。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见...

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

    通过学习本书,读者可以深入了解面向对象设计的核心思想,掌握实用的设计模式,并将其应用于实际项目中,提高软件系统的灵活性、可维护性和可扩展性。 总之,《设计模式--可复用面向对象软件的基础》不仅是一本经典...

    《设计模式--基于C#的工程化实现及扩展》.(王翔).rar.rar

    本书涵盖了各种经典的设计模式,包括创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式)、结构型模式(如适配器模式、桥接模式、装饰模式、组合模式、外观模式、代理模式、享元模式)以及行为...

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

    学习设计模式不仅可以提升个人编程能力,还能提高团队间的沟通效率。通过理解和掌握设计模式,开发者可以更有效地分析问题,设计出易于理解和维护的代码结构,从而提高软件的可复用性和可扩展性。 总而言之,《设计...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    通过学习和掌握GoF的23种设计模式,可以显著提高程序员的编码水平,使得开发出的软件系统更加健壮、可扩展、易维护。以上每种模式都有其特定的应用场景,理解和掌握它们的关键在于不断实践和总结,在实际项目中灵活...

    设计模式-2

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。...这个压缩包“设计模式-2”应该包含这些模式的详细解释和示例,是学习和复习设计模式的宝贵资源。

Global site tag (gtag.js) - Google Analytics