最近在看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....
分享到:
相关推荐
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
《C++20设计模式》学习笔记-第9章装饰器模式-配套代码
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 设计问题...
也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...
也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...
也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...
装饰者模式,php版本的,学习设计模式写的
9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...
23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) ...
设计模式C++学习之装饰模式(Decorator)
第一节 设计模式:学习顺序 第二节 简单工厂模式 第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第六节 外观模式 第七节 模板模式 第八节 组合模式 第九节 代理模式 第十节 命令模式 第十一节 观察者...
本书适用于学习面向中对象设计和设计模式的学生、程序员以及从事软件开发的人士。\r\n 本书要点包括:\r\n 对象、封装和继承的新观点。\r\n 设计模式的思想、起源及其在软件设计学科中的应用。\r\n 模式基础以及使用...
“[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...
设计模式装饰模式PPT学习教案.pptx
2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...
NULL 博文链接:https://alaric.iteye.com/blog/1911949
培养学生掌握简单工厂模式、工厂方法模式、单例模式、原型模式、桥接模式、适配器模式、装饰模式、代理模式、命令模式、观察者模式等常用设计模式的设计思想,并掌握在实际软件工程领域中的运用,能够把所学的原理...
设计模式之装饰模式实例,你值得拥有,好好学习,天天向上