1.代理模式
定义:为其他对象提供一种代理,以控制对这个对象的访问。
- 远程代理
- 虚拟代理
- 保护代理
- 智能引用代理
静态代理代理和被代理对象在代理之前是确定的,他们都实现相同的接口或者继承相同的抽象类
动态代理
- jdk 动态代理
- cglib 动态代理
2.策略模式
3.装饰者模式
定义: 动态地将责任附加到对象上。若要扩展功能,装饰者提供了更有弹性的替代方案。--HeadFirs
四个部分组成:
- 1.组件 (饮料)
- 2.被装饰对象(继承或实现组件) (原味奶茶)
- 3.装饰器(持有被装饰对象引用)(继承或实现组件)(为奶茶加料)
- 4.具体装饰者(继承或实现装饰器)(加珍珠奶茶)
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
网友评论