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();
            }
        }
  • 相关阅读:
    一张图片入门Python
    4.1. 如何在Windows环境下开发Python
    你必须知道的EF知识和经验
    XUnit的使用
    如何使用NUnit
    Entity Framework 不支持DefaultValue
    Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Entity Framework 与多线程
    sqlite中的自增主键
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6995406.html
Copyright © 2011-2022 走看看