1.定义一个接口类IHouse,接口方法toLive
2.定义一个实现类HouseImpl,实现IHouse接口重写toLive方法.
3.定义抽象装饰类IHouseDecorate,实现IHouse接口,重写toLive方法.构造方法带参数接口类IHouse。
4.定义一个装饰类LargeBuilding,继承IHouseDecorate,并重写toLive方法
5.定义一个装饰类Restaurant,继承IHouseDecorate,并重写toLive方法
6.测试

父子类(接口,实现)关系
IHouse
——HouseImpl (implements IHouse{)
——IHouseDecorate(abstract类 implements IHouse{)
——————LargeBuilding(extends IHouseDecorate )
——————Restaurant(extends IHouseDecorate )

1.定义一个接口类IHouse,接口方法toLive

//房子接口
public interface IHouse {
public abstract void toLive();
}

2.定义一个实现类HouseImpl,实现IHouse接口重写toLive方法.

//实现房子接口,实现房子的住人方法
public class HouseImpl implements IHouse{
public void toLive() {
    System.out.println("房子可以住人");
}
}

3.定义抽象装饰类IHouseDecorate,实现IHouse接口,重写toLive方法.构造方法带参数接口类IHouse


//房子装饰类
public abstract class IHouseDecorate implements IHouse {

    private IHouse iHouse;

    public IHouseDecorate(IHouse iHouse) {
        this.iHouse = iHouse;
    }

    @Override
    public void toLive() {
        this.iHouse.toLive();
    }
}

4.定义一个装饰类LargeBuilding,继承IHouseDecorate,并重写toLive方法

//大厦
public class LargeBuilding extends IHouseDecorate{
    public LargeBuilding(IHouse iHouse) {
        super(iHouse);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void toLive() {
        super.toLive();
        System.out.println("大厦还可以办公");
    }
}

5.定义一个装饰类Restaurant,继承IHouseDecorate,并重写toLive方法

//餐厅
public class Restaurant  extends IHouseDecorate{

    public Restaurant(IHouse iHouse) {
        super(iHouse);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void toLive() {
        System.out.println("餐厅还可以吃饭");
        super.toLive();
    }
}

测试:

public static void main(String[] args) {
        System.out.println("-----房子基本功能住人-------");
        IHouse ih = new HouseImpl();
        ih.toLive();

        System.out.println("-----先吃饭,在住人-------");
        IHouseDecorate iHouseDecorate = new Restaurant(ih);
        iHouseDecorate.toLive();


        System.out.println("-----住人后,再办公-------");
        iHouseDecorate = new LargeBuilding(ih);
        iHouseDecorate.toLive();

        System.out.println("----先吃饭,在住人,再办公--------");
        iHouseDecorate = new Restaurant(new LargeBuilding(ih));
        iHouseDecorate.toLive();
    }
输出:
-----房子基本功能住人-------
房子可以住人
-----先吃饭,在住人-------
餐厅还可以吃饭
房子可以住人
-----住人后,再办公-------
房子可以住人
大厦还可以办公
----先吃饭,在住人,再办公--------
餐厅还可以吃饭
房子可以住人
大厦还可以办公
posted on 2017-04-08 15:05  2637282556  阅读(90)  评论(0编辑  收藏  举报