装饰者模式

来源:互联网 发布:mac双系统怎么删除os 编辑:程序博客网 时间:2024/06/05 13:32

刚刚看了设计模式的装饰者模式

实验楼地址:

https://www.shiyanlou.com/courses/100/labs/874/document

装饰者模式类图:

这里写图片描述

代码:

// 抽象类 Girlpublic abstract class Girl {    String description = "no particular";    public String getDescription(){        return description;    }}// 美国女孩public class AmericanGirl extends Girl {    public AmericanGirl() {        description = "+AmericanGirl";    }}// 国产妹子public class ChineseGirl extends Girl {    public ChineseGirl() {        description = "+ChineseGirl";    }}// 装饰者public abstract class GirlDecorator extends Girl {    public abstract String getDescription();}// 下面以美国女孩示例// 给美国女孩加上金发public class GoldenHair extends GirlDecorator {    private Girl girl;    public GoldenHair(Girl g) {        girl = g;    }    @Override    public String getDescription() {        return girl.getDescription() + "+with golden hair";    }}// 加上身材高大的特性public class Tall extends GirlDecorator {    private Girl girl;    public Tall(Girl g) {        girl = g;    }    @Override    public String getDescription() {        return girl.getDescription() + "+is very tall";    }}// 检验一下public class Test {    public static void main(String[] args) {        Girl g1 = new AmericanGirl();        System.out.println(g1.getDescription());        GoldenHair g2 = new GoldenHair(g1);        System.out.println(g2.getDescription());        Tall g3 = new Tall(g2);        System.out.println(g3.getDescription());        // 你也可以一步到位        // Girl g = new Tall(new GoldenHair(new AmericanGirl()));     }}

输出结果:

+AmericanGirl+AmericanGirl+with golden hair+AmericanGirl+with golden hair+is very tall

主要收获:

java中接口的方法都是抽象的,实现接口的类要把所有的方法实现
java中抽象类的方法不都是抽象的,继承抽象类的时候对于非抽象方法,不一定要实现,对于抽象方法一定要实现


欢迎加入中科院开源软件自习室:631696396

欢迎加入中科院开源软件自习室