装饰者设计模式
以下是一个装饰者设计的简单列子:
一..先实现做馒头的接口----------------------------------------------------------------
/**
* 做面包的接口
* */
public interface IBread {
public void prepair(); //准备材料
public void kneadFlour(); //和面
public void steamed(); //蒸馒头
public void process(); //加工馒头}
二..制作正常馒头(馒头接口的实现类)----------------------------------------------------------------
/**
* 制作正常馒头
* */
public class NormalBread implements IBread{
@Override
public void prepair() {
// TODO Auto-generated method stub
System.out.println("准备面粉,水以及发酵粉...");
}
@Override
public void kneadFlour() {
// TODO Auto-generated method stub
System.out.println("和面...");
}
@Override
public void steamed() {
// TODO Auto-generated method stub
System.out.println("蒸馒头...香喷喷的馒头出炉了");
}
@Override
public void process() {
// TODO Auto-generated method stub
prepair();
kneadFlour();
steamed();
}
}
三..定义出制作馒头的抽象类(重点)----------------------------------------------------------------
/**
* 定义出制作面包的抽象类
* */
public abstract class AbstractBread implements IBread{
private final IBread bread;
public AbstractBread(IBread bread) {
super();
this.bread = bread;
}
public void prepair() {
this.bread.prepair();
}
public void kneadFlour() {
this.bread.kneadFlour();
}
public void steamed() {
this.bread.steamed();
}
public void process() {
prepair();
kneadFlour();
steamed();
}
}
四..定义上面抽象类的实现类----------------------------------------------------------------
-------------------------(1)--------------------------
/**
* 生产有着色剂的"玉米馒头"
* */
public class CornDecorator extends AbstractBread{
public CornDecorator(IBread bread) {
super(bread);
// TODO Auto-generated constructor stub
}
public void paint(){
System.out.println("添加柠檬黄的着色剂");
}
public void kneadFlour() {
//添加着色剂后和面
this.paint();
super.kneadFlour();
}
}
-------------------------(2)---------------------------
/**
* 生产有甜蜜素的"甜馒头"
* */
public class SweetDecorator extends AbstractBread{
public SweetDecorator(IBread bread) {
super(bread);
// TODO Auto-generated constructor stub
}
public void paint(){
System.out.println("添加甜蜜素...");
}
public void kneadFlour() {
//添加甜蜜素后和面
this.paint();
super.kneadFlour();
}
}
五、客户端测试---------------------------------------------------
public static void main(String[] args) {
IBread normalBread = new NormalBread();
normalBread = new SweetDecorator(normalBread);
normalBread = new CornDecorator(normalBread);
normalBread.process();
}
效果: