首页 > 其他分享 >AdapterPattern-适配器模式

AdapterPattern-适配器模式

时间:2023-08-16 11:26:31浏览次数:44  
标签:AdapterPattern mysqlclass 适配器 Update 模式 public MySql void

C#适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。

适配器模式的核心思想是通过一个适配器类,将原本不兼容的接口转换成兼容的接口,使得客户端能够使用这些接口进行交互,而不需要修改原有的类或接口。适配器模式通常涉及以下几个角色:

目标接口(Target Interface):客户端所期望的接口,通过适配器进行调用。

适配器类(Adapter Class):实现目标接口,并持有源接口的实例,通过调用源接口的方法来适配目标接口。

源接口(Adaptee Interface):需要被适配的接口或类。

namespace AdapterPattern_适配器模式
{/// <summary>
/// 目标接口
/// </summary>
    public interface SqlInterface
    {
        void Add<T>();
        void Delete<T>();
        void Update<T>();
        void Query<T>();
    }
}
namespace AdapterPattern_适配器模式
{/// <summary>
/// SqlServer数据库
/// </summary>
    public class SqlServer : SqlInterface
    {
        public void Add<T>()
        {
            Console.WriteLine("This is {0} Add", this.GetType().Name);
        }
        public void Delete<T>()
        {
            Console.WriteLine("This is {0} Delete", this.GetType().Name);
        }
        public void Update<T>()
        {
            Console.WriteLine("This is {0} Update", this.GetType().Name);
        }
        public void Query<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }
    }
}
namespace AdapterPattern_适配器模式
{/// <summary>
/// 源接口,新增MySql
/// </summary>
    public class MySql
    {
        public void AddRedis<T>()
        {
            Console.WriteLine("This is {0} Add", this.GetType().Name);
        }
        public void DeleteRedis<T>()
        {
            Console.WriteLine("This is {0} Delete", this.GetType().Name);
        }
        public void UpdateRedis<T>()
        {
            Console.WriteLine("This is {0} Update", this.GetType().Name);
        }
        public void QueryRedis<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }
    }
}
namespace AdapterPattern_适配器模式
{/// <summary>
/// 类适配器模式
/// </summary>
    public class MySqlClass : MySql, SqlInterface
    {
        public void Add<T>()
        {
            base.AddRedis<T>();
        }

        public void Delete<T>()
        {
            base.DeleteRedis<T>();
        }

        public void Update<T>()
        {
            base.UpdateRedis<T>();
        }

        public void Query<T>()
        {
            base.QueryRedis<T>();
        }
    }
}
namespace AdapterPattern_适配器模式
{/// <summary>
/// 对象适配器模式
/// </summary>
    public class MySqlObject : SqlInterface
    {
        private MySql mySql = null;
        public MySqlObject(MySql mySql)
        {
            this.mySql = mySql;
        }
        public MySqlObject()
        {
            this.mySql = new MySql();
        }
        public void Add<T>()
        {
            this.mySql.AddRedis<T>();
        }

        public void Delete<T>()
        {
            this.mySql.DeleteRedis<T>();
        }

        public void Update<T>()
        {
            this.mySql.UpdateRedis<T>();
        }

        public void Query<T>()
        {
            this.mySql.QueryRedis<T>();
        }
    }
}
namespace AdapterPattern_适配器模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            {
                Console.WriteLine("*****************************");
                SqlInterface sqlserver = new SqlServer();
                sqlserver.Add<Program>();
                sqlserver.Delete<Program>();
                sqlserver.Update<Program>();
                sqlserver.Query<Program>();
            }
            {
                Console.WriteLine("*****************************");
                SqlInterface mysqlclass = new MySqlClass();
                mysqlclass.Add<Program>();
                mysqlclass.Delete<Program>();
                mysqlclass.Update<Program>();
                mysqlclass.Query<Program>();
            }
            {
                Console.WriteLine("*****************************");

                SqlInterface mysqlclass = new MySqlObject();
                mysqlclass.Add<Program>();
                mysqlclass.Delete<Program>();
                mysqlclass.Update<Program>();
                mysqlclass.Query<Program>();
            }
            {
                Console.WriteLine("*****************************");
                MySql mysql = new MySql();
                SqlInterface mysqlclass = new MySqlObject(mysql);
                mysqlclass.Add<Program>();
                mysqlclass.Delete<Program>();
                mysqlclass.Update<Program>();
                mysqlclass.Query<Program>();
            }
            Console.Read();
            //输出结果
            //*****************************
            //This is SqlServer Add
            //This is SqlServer Delete
            //This is SqlServer Update
            //This is SqlServer Query
            //* ****************************
            //This is MySqlClass Add
            //This is MySqlClass Delete
            //This is MySqlClass Update
            //This is MySqlClass Query
            //* ****************************
            //This is MySql Add
            //This is MySql Delete
            //This is MySql Update
            //This is MySql Query
            //* ****************************
            //This is MySql Add
            //This is MySql Delete
            //This is MySql Update
            //This is MySql Query
        }
    }
}

 

标签:AdapterPattern,mysqlclass,适配器,Update,模式,public,MySql,void
From: https://www.cnblogs.com/ZHIZRL/p/17633533.html

相关文章

  • 【设计模式之禅】里氏替换原则
    什么叫里氏替换原则?"这里需要如下的替换性质:若对类型S的每一个对象O1,都存在一个类型T的对象O2,使得在所有针对T编写的程序P中,用O1替换O2后,程序P的行为功能不变,则S是T的子类型。"这是最专业最权威的定义,但是我当时就是看不懂这句话,看完这个章节也没有完全理解,只能通俗易......
  • 设计模式--观察者模式
    简介观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。例如,Excel中的数据与折线图、饼状图、柱状图之间的关系组成发布者(Publisher)会向其他对象发送关注的事件。事件会在发布者自身状态改变或执行特定行为后发......
  • 14 观察者模式 -- go语言设计模式
    观察者模式也叫做发布-订阅模式。观察者通过通知器(发行商)把自己注册到(订阅)特定的通知(杂志)。当有通知的时候,观察者只从通知器得到它订阅的通知。观察者模式的实现代码packagemainimport"fmt"//---------抽象层--------//抽象的观察者typeListenerinterface{ OnTe......
  • 设计模式-行为型模式
    ⾏为模式:负责对象间的⾼效沟通和职责传递委派。PS:博客根据it老齐大话设计模式课程课件进行整理,IT老齐视频学习网站:https://www.itlaoqi.com包含的设计模式:策略模式、模板⽅法模式、观察者模式、迭代⼦模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模......
  • Redis(2):四种模式(单机、哨兵、集群、主从复制)部署
    学习自:Redis的四种模式-何童鞋-博客园深入理解Redis的部署模式四种模式的探索(redis部署四种模式)-数据库运维技术服务redis部署和运行原理redis的三种部署方式_小咪咪的技术博客_51CTO博客上一节:Redis(1):四种模式(单机、哨兵、集群、主从复制)原理0、所写m:master,主服务器s:s......
  • 1.单例模式
    单例模式定义:程序运行时,在java虚拟机中只存在该类的一个实例对象。demo:packagemode;publicclassSingleDemo{//创建SingleDemo单例对象privatestaticSingleDemoinstance=newSingleDemo();//将构造方法设成私有的,这样该类就不会被实例化pri......
  • 工厂方法模式练习:工厂方法模式在农场系统中的实现(IDEA)
    前言简单工厂模式和工厂模式的区别 简单工厂模式:也叫做静态工厂模式,可创建多个实现类,简单工厂模式实现了创建实现类的代码跟客户端分离,在工厂类里面可以添加所需生成实现类的逻辑; 缺点是每次增加一种实现类,都需要修改工厂类,不符合开闭原则;上期我发了一篇简单工厂模式练习......
  • 设计模式-工厂模式
    工厂模式(文章目录)什么是工厂模式  工厂模式,顾名思义,就是将对象的创建看作一个工厂,你告诉工厂需要的实例类型,工厂给你对象实例。  一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在GoF的《设计模式》一书中,它将简单工厂模式看作是工厂......
  • C/C++基础知识点——设计原则及设计模式
    如何实现模块间高内聚、低耦合?封装与抽象;添加中间层;模块化;设计思想与原则单一职责;接口隔离原则;依赖倒置;迪米特原则;多用组合少用继承;设计模式:观察者模式设计原则及设计模式六大设计原则:单一职责原则;里氏替换原则;开闭原则;依赖倒置原则;接口隔离原则;最少知识原则。......
  • SAP CRM One Order 锁定模式用的是 Exclusive Lock
    在SAPCRMWebClientUI上点击Edit按钮后,界面进入可编辑状态:后台SM12事务码观察到锁类型为E,即Exclusivelock,也就是排他锁。其中PRCD_HEAD是Pricing模块抬头级别的数据:CRMOneOrder对应的lockobject名称为:E_CRM_ORDER关于这个叫做prospect的必填字......