设计模式

2019-10-20  本文已影响0人  蓬莱辰

1.代理模式

定义:为其他对象提供一种代理,以控制对这个对象的访问。

  1. jdk 动态代理
  2. cglib 动态代理

2.策略模式

3.装饰者模式

定义: 动态地将责任附加到对象上。若要扩展功能,装饰者提供了更有弹性的替代方案。--HeadFirs

四个部分组成:

装饰者.jpg image.png
package sliu.designpattern;

public abstract class Decorate implements Drink {
    private Drink drink;

    /**
     * 持有组件对象的引用
     *
     * @param drink
     */
    public Decorate(Drink drink) {
        this.drink = drink;
    }

    @Override
    public String getdesc() {
        return drink.getdesc();
    }

    @Override
    public Double getPrice() {
        return drink.getPrice();
    }
}
package sliu.designpattern;

public class MilkTeak implements Drink {
    @Override
    public Double getPrice() {
        return 12.0;
    }

    @Override
    public String getdesc() {
        return "原味奶茶";
    }
}

package sliu.designpattern;

/**
 * 被装饰者组件
 */
public interface Drink {
    public String getdesc();

    public Double getPrice();
}
package sliu.designpattern;

/**
 * 具体装饰器
 */
public class IceDecorate extends Decorate {
    /**
     * 持有组件对象的引用
     *
     * @param drink
     */
    public IceDecorate(Drink drink) {
        super(drink);
    }

    @Override
    public Double getPrice() {
        return super.getPrice() + 2.0;
    }

    @Override
    public String getdesc() {
        return super.getdesc() + "加冰";
    }
}
package sliu.designpattern;

public class BubbleTea extends Decorate {

    public BubbleTea(Drink drink) {
        super(drink);
    }

    @Override
    public Double getPrice() {
        return super.getPrice() + 2.0;
    }

    @Override
    public String getdesc() {
        return super.getdesc() + "加珍珠";
    }
}

package sliu.designpattern;

/**
 * 测试类
 */
public class DecorateTest {
    public static void main(String[] args) {
        // 原味奶茶
        Drink drink = new MilkTeak();
        // 加冰 装饰器
        drink = new IceDecorate(drink);
        // 加珍珠 装饰器
        drink = new BubbleTea(drink);
        System.out.println(drink.getdesc() + "价格为:" + drink.getPrice());
    }
}


image.png
上一篇 下一篇

猜你喜欢

热点阅读