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();
            }
        }
  • 相关阅读:
    在Oracle中添加用户 赋权 修改暗码 解锁
    Ubuntu Linux 8.04 Vsftp 假造用户设置
    用一个实例讲解DB2数据库游标轮回的成果
    解说Oracle数据库自动增长列的完成过程
    MSN登录错误“80072efd”解决办法
    再学 GDI+[61]: 路径画刷(1) SetCenterColor、SetSurroundColors
    WinAPI: 测试 BitBlt
    两个 CopyRect
    再学 GDI+[58]: 路径 保存与读取路径数据
    再学 GDI+[62]: 路径画刷(2) SetCenterPoint、GetCenterPoint
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6995406.html
Copyright © 2011-2022 走看看