策略模式
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
Demo
商品父类
public abstract class Goods {
protected List<Promotion> promotions = new ArrayList<>();
public abstract String getName();
public void joinPromotions() {
System.out.println(getName()+"参与的促销活动有:");
for (Promotion promotion : promotions) {
promotion.name();
}
}
public void addPromotion(Promotion prototion) {
promotions.add(prototion);
}
}
封装促销活动
public interface Promotion {
void name();
}
创建促销信息
/**
* 满减活动
*/
public class Reduction implements Promotion {
@Override
public void name() {
System.out.println("满300减150");
}
}
/**
* 折扣活动
*/
public class Discount implements Promotion {
@Override
public void name() {
System.out.println("3件8折");
}
}
创建商品
/**
* 图书
*/
public class Book extends Goods {
public Book() {
promotions.add(new Reduction());//图书参与满减活动
}
@Override
public String getName() {
return "图书";
}
}
/**
* 衬衫
*/
public class Shirt extends Goods {
public Shirt() {
promotions.add(new Discount());//衬衫参与折扣活动
}
@Override
public String getName() {
return "衬衫";
}
}
测试类
public class Main {
public static void main(String[] args) {
Goods book = new Book();
book.joinPromotions();
System.out.println("");
Goods shirt = new Shirt();
shirt.joinPromotions();
System.out.println("");
book.addPromotion(new Discount());//图书加大促销力度
book.joinPromotions();
}
}
打印结果
图书参与的促销活动有:
满300减150
衬衫参与的促销活动有:
3件8折
图书参与的促销活动有:
满300减150
3件8折