设计模式一(Factory Method,Abstract Factory)

Factory Method模式:Factory Method模式使一个类的实例化延迟到子类,具体来讲,就是Factory Method模式将创建对象实例的责任转移到工厂类,也就是说在工厂类里面,定义对象的实例化。

Abstract Factory模式Abstract Factory模式是一系列对象的创建,所以在抽象工厂类里面要创建一系列的对象的实例化,而不是单个对象的实例化。 切记这一系列对象存在一定的联系。

演示代码一

大家知道数据库有 SQL数据库与甲骨文数据库,现实当中我们有时候需要变换不同的数据库访问 以下采用Factory Method模式做这个变换效果

using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethod
{
    class Program
    {
        static void Main(string[] args)
        {

            Sql test = (Sql)ManagerDatabase.Factory.Create();
            test.WriteDatabase("访问的是SQL数据库");

            //Oracle test = (Oracle)ManagerDatabase.Factory.Create();
            
//test.WriteDatabase("访问的是Oracle数据库");
        }



        public abstract class ManagerDatabase //采用什么数据库来访问
        {
            public static DatabaseFactory Factory = new SqlFactory();//采用Sql数据库访问
            
//public static DatabaseFactory Factory = new OracleFactory();//采用甲骨文数据库访问
        }


        public abstract class Database //数据库
        {
            public abstract void WriteDatabase(string name);
        }


        public class Sql : Database //SQL数据库
        {
            public override void WriteDatabase(string name)
            {
                Console.WriteLine(name);
            }

        }


        public class Oracle : Database //甲骨文数据库
        {
            public override void WriteDatabase(string name)
            {
                Console.WriteLine(name);
            }

        }


        public abstract class DatabaseFactory //数据库工厂
        {
            public abstract Database Create();
        }


        public class SqlFactory : DatabaseFactory //生产SQL数据库
        {
            public override Database Create()
            {
                return new Sql();
            }

        }


        public class OracleFactory : DatabaseFactory //生产甲骨文数据库
        {
            public override Database Create()
            {
                return new Oracle();
            }

        }


    }

}



结果输出:访问的是SQL数据库


演示代码二

      大家都知道衣服 有纽扣 也有衣领, 纽扣 衣领这些小东西一般需要交给加工厂单独来制作,在这里我们假设在中国加工厂制作称为中国的衣服(中国制造),在美国加工厂制作称为美国的衣服(美国制造)。以下采用abstractFactory模式来演示。

using System;
using System.Collections.Generic;
using System.Text;

namespace abstractFactory
{
    class Program
    {

        public interface IButton //纽扣
        {
            void Button();
        }


        public interface ICollar//衣领
        {
            void Collar();
        }


        public class ChinaButton : IButton //中国纽扣
        {

            public void Button()
            {
                Console.WriteLine("中国的纽扣");
            }


        }


        public class ChinaCollar : ICollar //中国衣领
        {

            public void Collar()
            {
                Console.WriteLine("中国的衣领");
            }


        }

        public class USAButton : IButton //美国纽扣
        {

            public void Button()
            {
                Console.WriteLine("美国的纽扣");
            }


        }


        public class USACollar : ICollar  //美国衣领
        {

            public void Collar()
            {
                Console.WriteLine("美国的衣领");
            }


        }



        public interface IClothesFactory //衣服加工厂
        {
            IButton DoButton();
            ICollar DoCollar();
        }



        public class ChinaFactory : IClothesFactory //中国的衣服加工厂 //切记是多个对象的实例化
        {
            public IButton DoButton()
            {
                return new ChinaButton();
            }

            public ICollar DoCollar()
            {
                return new ChinaCollar();
            }

        }



        public class USAFactory : IClothesFactory//美国的衣服加工厂  切记是多个对象的实例化
        {
            public IButton DoButton()
            {
                return new USAButton();
            }

            public ICollar DoCollar()
            {
                return new USACollar();
            }

        }


        public abstract class Manufacturing
        {
            public static IClothesFactory Factory = new ChinaFactory(); //中国制造
            
//public static IClothesFactory Factory = new USAFactory();//美国制造

        }


        static void Main(string[] args)
        {
            IButton cf = (IButton)Manufacturing.Factory.DoButton();
            ICollar af = (ICollar)Manufacturing.Factory.DoCollar();
            cf.Button();//做纽扣
            af.Collar();//做衣领
            Console.Read();


        }

    }

}



结果输出:中国的纽扣
              中国的衣领

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值