Пример #1
0
        static void Main(string[] args)
        {
            {
                Console.WriteLine("************************");
                IHelper helper = new MySqlHelper();
                helper.Query <Program>();
                helper.Delete <Program>();
                helper.Update <Program>();
                helper.Add <Program>();
            }
            {
                Console.WriteLine("************************");
                IHelper helper = new OracleHelper();
                helper.Query <Program>();
                helper.Delete <Program>();
                helper.Update <Program>();
                helper.Add <Program>();
            }
            {
                Console.WriteLine("************************");
                IHelper helper = new SqlserverHelper();
                helper.Query <Program>();
                helper.Delete <Program>();
                helper.Update <Program>();
                helper.Add <Program>();
            }
            {
                //引入第三方的redis,不适配
                Console.WriteLine("************************");
                IHelper helper = new RedisHelperInherit();//类适配器
                helper.Query <Program>();
                helper.Delete <Program>();
                helper.Update <Program>();
                helper.Add <Program>();
            }
            {//组合优于继承
                Console.WriteLine("***************");
                Console.WriteLine("************************");
                IHelper helper = new RedisHelperCombination();//对象适配器
                helper.Query <Program>();
                helper.Delete <Program>();
                helper.Update <Program>();
                helper.Add <Program>();
            }
            //都做到了适配,都能新旧适配起来
            //组合优于继承 1.继承是强侵入形的 会带过来父类的方法(有多余的东西)
            //            2.灵活性问题(组合是依赖抽象的,继承是依赖细节的)
            //应用总结:
            //属于不救模式,全新引入新的组件要用上的
            //不能在项目一开始设计的时候就搞适配器,徒增难度
            //时机选择


            Console.WriteLine("Hello World!");
        }
Пример #2
0
        /*
         * 举一场景来分析适配器模式:
         * 做Ado.Net时有一接口,不通数据库操作是都要实现这个接口,现在要加一个非关系型数据库Redis,也要
         * 用这种形式进行调用
         */
        static void Main(string[] args)
        {
            {
                Console.WriteLine("*******************************");
                IDbHelper helper = new SqlServiceHelper();
                Program   p      = null;
                helper.Add <Program>(p);
                helper.Update <Program>(p);
                helper.Delete <Program>(p);
                helper.Query <Program>(p);
            }

            {
                Console.WriteLine("*******************************");
                IDbHelper helper = new MySqlHelper();
                Program   p      = null;
                helper.Add <Program>(p);
                helper.Update <Program>(p);
                helper.Delete <Program>(p);
                helper.Query <Program>(p);
            }

            {
                Console.WriteLine("*******************************");
                IDbHelper helper = new OracleHelper();
                Program   p      = null;
                helper.Add <Program>(p);
                helper.Update <Program>(p);
                helper.Delete <Program>(p);
                helper.Query <Program>(p);
            }

            {
                /* 有一个第三方Redis的类库RedisHelper的帮助类,现在要实现使用该类的方式,要像使用关系型数据库一样,现在不适配,怎么适配一下
                 */

                //1.通过继承的方式来实现,在外面包一层RedisHelperInherit,通过调用RedisHelperInherit来实现

                Console.WriteLine("*************通过继承的方式来实现,在外面包一层RedisHelperInherit,通过调用RedisHelperInherit来实现******************");
                IDbHelper helper = new RedisHelperInherit();

                Program p = null;
                helper.Add <Program>(p);
                helper.Update <Program>(p);
                helper.Delete <Program>(p);
                helper.Query <Program>(p);
            }
            {
                /*2.通过组合的方式来实现*/

                Console.WriteLine("*************通过组合的方式来实现,在外面包一层RedisHelperCombinnation,通过调用RedisHelperCombinnation来实现******************");
                IDbHelper helper = new RedisHelperCombinnation();
                Program   p      = null;
                helper.Add <Program>(p);
                helper.Update <Program>(p);
                helper.Delete <Program>(p);
                helper.Query <Program>(p);
            }

            /*分析两种方式优劣:
             * 组合优于继承
             * 1.继承是强侵入性的(有多余的东西),因为这样 new RedisHelperInherit().点后面会有AddRedis等方法,但这样方式不是我们要的;
             *        new RedisHelperInherit().AddRedis
             * 2.灵活性问题(组合是依赖抽象的,继承是依赖细节的)
             */
        }
Пример #3
0
        static void Main(string[] args)
        {
            try
            {
                {
                    IHelper helper = new SqlServerHelper();
                    helper.Add <Program>();
                    helper.Delete <Program>();
                    helper.Query <Program>();
                    helper.Update <Program>();
                }

                {
                    IHelper helper = new OracleHelper();
                    helper.Add <Program>();
                    helper.Delete <Program>();
                    helper.Query <Program>();
                    helper.Update <Program>();
                }

                {
                    IHelper helper = new MysqlHelper();
                    helper.Add <Program>();
                    helper.Delete <Program>();
                    helper.Query <Program>();
                    helper.Update <Program>();
                }

                {
                    //由于Redis是第三方的类库,虽然当中也有增删改查,
                    //但我们无法直接让其继承IHelper 故而无法像如下使用
                    //此时我们应当考虑适配器模式

                    //    IHelper helper = new RedisHelper();
                    //    helper.Add<Program>();
                    //    helper.Delete<Program>();
                    //    helper.Query<Program>();
                    //    helper.Update<Program>();
                }

                {
                    IHelper helper = new RedisHelperInherit();
                    helper.Add <Program>();
                    helper.Delete <Program>();
                    helper.Query <Program>();
                    helper.Update <Program>();

                    RedisHelperInherit helperInherit = new RedisHelperInherit();

                    helperInherit.AddRedis <Program>(); //强侵入性,继承导致父类有的子类必须也有
                }

                {
                    IHelper helper = new RedisHelperCombination();
                    helper.Add <Program>();
                    helper.Delete <Program>();
                    helper.Query <Program>();
                    helper.Update <Program>();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                // throw;
            }
        }