zoukankan      html  css  js  c++  java
  • 设计模式之模式方法模式

    模式方法模式类图:

    定义:定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤

    模板方法模式要注意:

    1. 为了可以让模板方法pay 能够让客户端使用,访问级别为public,  而其他方法的访问设置为protected,客户端不能使用。

    这里我们假设,向第三方支付发起请求的过程一致,分别为:构造请求参数 ,排序,加密。

     /// <summary>
        /// 付款 抽象类
        /// </summary>
        public abstract class AbstractPayment
        {
            /// <summary>
            /// 第一步:设计请求参数
            /// </summary>
            protected abstract void Request();
    
            /// <summary>
            /// 第二步:排序
            /// </summary>
            protected abstract void Sort();
    
            /// <summary>
            /// 第三步:加密码
            /// </summary>
            protected abstract void Encrypt();
    
            /// <summary>
            /// 模板方法:付款
            /// </summary>
            public void Pay()
            {
                Request();
                Sort();
                Encrypt();
                Console.WriteLine("付款请求已发送");
            }
        }
    
        public class AliPayment : AbstractPayment
        {
            protected override void Encrypt()
            {
                Console.WriteLine("AliPay 请求加密 ");
            }
    
            protected override void Request()
            {
                Console.WriteLine("AliPay 构造请求参数 ");
            }
    
            protected override void Sort()
            {
                Console.WriteLine("AliPay 参数排序 ");
    
            }
        }
    
        public class WeiXinPay : AbstractPayment
        {
            protected override void Encrypt()
            {
                Console.WriteLine("WeiXinPay 参数加密");
            }
    
            protected override void Request()
            {
                Console.WriteLine("WeiXinPay 构造请求参数");
            }
    
            protected override void Sort()
            {
                Console.WriteLine("WeiXinPay 参数排序");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Console.OutputEncoding = Encoding.UTF8;
    
                AbstractPayment aliPay = new AliPayment();
                aliPay.Pay();
    
                Console.WriteLine("-----------------分界线------------------");
    
                AbstractPayment weixinPay = new WeiXinPay();
                weixinPay.Pay();
    
                Console.ReadKey();
            }
        }
  • 相关阅读:
    requireJS的优化工具 ---- r.js
    requireJS基本配置相关
    利用thread和sleep生成字符串的伪随机序列
    操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)
    考虑一个特殊的hash函数h,能将任一字符串hash成一个整数k……
    二叉树的遍历(C++非递归实现)
    判断一点是否在一条射线的左边
    如何判断单链表是否存在环
    移位数组的二分查找
    字符串相关函数的实现
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6995406.html
Copyright © 2011-2022 走看看