1.委派模式的基本作用就是负责任务的调度和分配任务,跟代理模式很想,可以看作是一种特殊情况下的静态代理的全权代理,但是代理模式很注重过程,而委派模式注重结果。
2.不属于GOF 23种设计模式之一。
3.属于行为型模式
public interface IEmployee {
public void doing(String command);
}
public class EmployeeA implements IEmployee{
@Override
public void doing(String command) {
System.out.println("我是员工A,擅长加密");
}
}
public class EmployeeB implements IEmployee{
@Override
public void doing(String command) {
System.out.println("我擅长做架构");
}
}
public class Leader {
// 预先知道每个员工的特长,特征,分发任务
private Map<String, IEmployee> register = new HashMap<>();
public Leader() {
register.put("加密", new EmployeeA());
register.put("架构", new EmployeeB());
}
public void doing(String command) {
register.get(command).doing(command);
}
}
public class Boss {
public void command(String command, Leader leader) {
leader.doing(command);
}
}
public class DelegateTest {
public static void main(String[] args) {
new Boss().command("加密", new Leader());
}
}
public class MemberController {
public void getMemberById(String mid) {
}
public void getOrderById(String mid) {
}
}
public class DispatchServlet extends HttpServlet {
private static final long serialVersionUID = -334269929375066671L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 完成调度
doDispatch(req, resp);
super.service(req, resp);
}
private void doDispatch(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String uri = req.getRequestURI();
String mid = req.getParameter("mid");
if ("getMemberById".equals(uri)) {
new MemberController().getMemberById(mid);
} else if ("getOrderById".equals(uri)) {
new MemberController().getOrderById(mid);
} else {
resp.getWriter().write("404");
}
}
}
public abstract class Payment {
public abstract String getName();
protected abstract double queryBalance(String uid);
public MsgResult pay(String uid, double amount) {
if (queryBalance(uid) < amount) {
return new MsgResult(500, "余额不足", "支付失败");
}
return new MsgResult(200, amount, "支付成功");
}
}
public class Alipay extends Payment{
@Override
public String getName() {
return "支付宝";
}
@Override
protected double queryBalance(String uid) {
return 900;
}
}
public class JDPay extends Payment{
@Override
public String getName() {
return "京东";
}
@Override
protected double queryBalance(String uid) {
return 500;
}
}
public class UnionPay extends Payment{
@Override
public String getName() {
return "银联支付";
}
@Override
protected double queryBalance(String uid) {
return 230;
}
}
public class WechatPay extends Payment{
@Override
public String getName() {
return "微信支付";
}
@Override
protected double queryBalance(String uid) {
return 250;
}
}
public class PayStrategy {
public static final String ALI_PAY = "Alipay";
public static final String JD_PAY = "JdPay";
public static final String WECHAT_PAY = "WechatPay";
public static final String UNION_PAY = "UnionPay";
public static final String DEFAULT_PAY = ALI_PAY;
public static Map<String, Payment> payStrategy = new HashMap<>();
static {
payStrategy.put(ALI_PAY, new Alipay());
payStrategy.put(JD_PAY, new JDPay());
payStrategy.put(WECHAT_PAY, new WechatPay());
payStrategy.put(UNION_PAY, new UnionPay());
}
public static Payment get(String payKey) {
if (!payStrategy.containsKey(payKey)) {
return payStrategy.get(DEFAULT_PAY);
}
return payStrategy.get(payKey);
}
}
public class Order {
private String uid;
private String orderId;
private double amount;
public Order(String uid, String orderId, double amount) {
this.uid = uid;
this.orderId = orderId;
this.amount = amount;
}
public MsgResult pay(String payKey) {
Payment payment = PayStrategy.get(payKey);
System.out.println("欢迎使用" + payment.getName());
return payment.pay(uid, amount);
}
}
public interface PromotionStrategy {
void doPromotion();
}
public class CashbackStrategy implements PromotionStrategy{
@Override
public void doPromotion() {
System.out.println("返现促销,返回的金额转到支付宝账号");
}
}
public class CouponStrategy implements PromotionStrategy {
@Override
public void doPromotion() {
System.out.println("领取优惠券,课程的价格直接减去优惠券面值抵扣");
}
}
public class EmptyStrategy implements PromotionStrategy{
@Override
public void doPromotion() {
System.out.println("无促销活动");
}
}
public class GroupbuyStrategy implements PromotionStrategy{
@Override
public void doPromotion() {
System.out.println("拼团,满20人拼团,全团享受价格");
}
}
public class PromotionStrategyFactory {
private static final Map<String, PromotionStrategy> PROMOTION_Map = new HashMap<>();
static {
PROMOTION_Map.put(PromotionKey.COUPON, new CouponStrategy());
PROMOTION_Map.put(PromotionKey.CASHBACK, new CashbackStrategy());
PROMOTION_Map.put(PromotionKey.GROUPBUY, new GroupbuyStrategy());
}
private PromotionStrategyFactory() {
}
private interface PromotionKey {
String COUPON = "COUPON";
String CASHBACK = "CASHBACK";
String GROUPBUY = "GROUPBUY";
}
private static final PromotionStrategy NON_PROMOTION_STRATEGY = new EmptyStrategy();
public static PromotionStrategy getPromotionStrategy(String promotionKey) {
PromotionStrategy promotionStrategy = PROMOTION_Map.get(promotionKey);
return promotionStrategy == null ? NON_PROMOTION_STRATEGY : promotionStrategy;
}
}
public class PromotionActivity {
PromotionStrategy promotionStrategy;
public PromotionActivity(PromotionStrategy promotionStrategy) {
this.promotionStrategy = promotionStrategy;
}
public void execute() {
this.promotionStrategy.doPromotion();
}
}
public class PromotionActivityTest {
public static void main(String[] args) {
// PromotionActivity promotionActivity = new PromotionActivity(new CouponStrategy());
//
// PromotionActivity promotionActivity1 = new PromotionActivity(new CashbackStrategy());
//
// promotionActivity.execute();
//
// promotionActivity1.execute();
String promotionKey = "GROUPBUY";
PromotionActivity promotionActivity = new PromotionActivity(PromotionStrategyFactory.getPromotionStrategy(promotionKey));
promotionActivity.execute();
}
}