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();
            }
        }
  • 相关阅读:
    使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示
    SpringMVC与Struts2的对比
    事务不提交,也有可能写redo和数据文件
    14.4.1 InnoDB Startup Configuration
    SLB 权重问题
    perl 访问网站一些useragent的设置
    14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
    nginx 区分pc和mobile 到不同的404页面
    dokcer 运行和进入容器
    docker 私有仓库查询
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6995406.html
Copyright © 2011-2022 走看看