• 设计模式之模式方法模式


    模式方法模式类图:

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

    模板方法模式要注意:

    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();
            }
        }
  • 相关阅读:
    关于数组赋值时找不到数组名字的问题
    显示转换与隐式转换
    类型(值类型和引用类型)
    .net webconfig中配置httphanlder无法生效的问题
    微信小程序开发知识点总结
    Raphael.js API 之 Element.attr()
    Raphael.js API 之 Element.attr()
    Raphael.js API之 Animation.delay(),Animation.repeat(),Element.animateWith()
    Raphael.js API之 Animation.delay(),Animation.repeat(),Element.animateWith()
    Raphael.js API之 Paper.path(),Element.click()
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6995406.html
Copyright © 2020-2023  润新知