工厂与抽象工厂

委托注入

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

            Func<EmployeeFactory.EmployeeparaContent, Employee.EmployeeAddress> employeeAddressPr = (s) =>
            {
                return new Employee.EmployeeAddress()
                {
                    Address1 = s.EmployeeAdress.Split(‘,‘)[0],
                    Address2 = s.EmployeeAdress.Split(‘,‘)[1]

                };

            };

             var empolyea=  EmployeeFactory.CreateEmployee("wzj", "北京1,杭州2", employeeAddressPr);
             Console.Write(empolyea.Name + "\t" + empolyea.AddressCollers.Address1 + "|" + empolyea.AddressCollers.Address2);
             Console.ReadLine();
        }
    }

    //员工类
    public partial class Employee
    {

        //员工的地址类
        public class EmployeeAddress
        {
            public string Address1 { set; get; }

            public string Address2 { set; get; }
        }
        //名字
        public string Name{set;get;}
        //员工的地址信息
        public EmployeeAddress AddressCollers { set; get; }
    }

    //创建员工的简单工厂类  设计模式之创建形态
    public class EmployeeFactory
    {
       public class EmployeeparaContent
        {

            public string EmployeeAdress { set; get; }
        }

        //创建员工的方法  地址处理通过动态的委托来处理 可以随时变化处理方式*-

        public static Employee CreateEmployee(string name, string address, Func<EmployeeFactory.EmployeeparaContent, Employee.EmployeeAddress> adressFactory)
        {

            EmployeeparaContent parrcontent = new EmployeeparaContent();
            parrcontent.EmployeeAdress = address;
            //通过委托来代替工厂创建参数类型 更灵活
            return new Employee() { Name = name, AddressCollers = adressFactory(parrcontent) };

        }

    }

  

工厂创建的优势:对象的创建依赖工厂的创建方法 还不是依赖于new  如果这个对象的创建需要修改 new 的地方都需要改  工厂模式的话只需要修改工厂代码就行

2.抽象工厂

用接口吧创建的对象的行为和成员变量给抽象出来

然后创建的的时候根据配置文件或者其他的  来创建继承该接口的对象  这样就符合依赖倒置的原则高层不依赖低层 应该依赖抽象

时间: 2024-10-13 22:33:03

工厂与抽象工厂的相关文章

简单工厂、工厂、抽象工厂随记

昨日睡前重温了下之前阅读过的 设计模式 Head First系列中的工厂模式 有点温故而知新的感觉 故记之 工厂,在一般生活当中,充当的一个角色应该是:生产车间 也就是加工原料,产出产品的地方. 这其实也是软件的本质,计算机的本质 根据输入,输出数据 什么意思呢?我们先来看看简单工厂的例子 public Foot createFoot (Material material) { if (material.getName().equals("flour")) { return new N

简单工厂、多态工厂和抽象工厂设计模式的比较

工厂模式的主要作用就是封装对象的创建过程,使得程序员不必准确指定创建对象所需要的构造函数,这样做的一个好处就是增加了程序的可扩展性.由于每个面向对象应用程序的设计都需要创建对象,并且由于人们可能需要通过增加新的类型来扩展应用程序,工厂模式可能是最有用的设计模式之一. 总的来说,工厂模式主要分为三种类型:简单工厂模式.多态工厂模式.抽象工厂模式.这三种模式都属于设计模式中的创建行模式,他们多多少少在设计上有些相似之处,其最终的目的都是为了将对象的实例化部分取出来,进而优化系统的架构,增加程序的可扩

一口一个设计模式--简单工厂VS工厂VS抽象工厂

前几天一直在准备大学毕业,始终脱不开身,今天终于有时间进行设计模式的研究.咱们今天研究的话题是工厂家族三种设计模式的对比--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单工厂的升级版,抽象工厂是工厂模式的升级版,简单工厂+抽象工厂是抽象工厂的升级版.知道了它们之间的宏观关系,下面我带它们从一次次蜕变了解它们为什么是这样的关系. 我们最原始的代码思维是把所有的实现都放在一个类中,功能虽然是实现了,但耦合性非常高,很不方便维护,好比活字印刷术之前的印刷,一个地方需要修改,

简单工厂,抽象工厂,工厂模式三者的对比

简单工厂,抽象工厂,工厂模式三者的对比 作者: TindleWei 博客: http://blog.csdn.net/mennoa(转载请说明出处) GitHub: https://github.com/TindleWei 我想大家都熟悉工厂模式,但是要分清简单工厂,抽象工厂,工厂模式可能就没那么容易了.所以我查看了许多资料以及设计模式关于工厂模式的介绍,下面来总结一下. 前言 简单工厂,抽象工厂,工厂模式都属于创建型模式. 该模式的特点是抽象了实例化的过程.它们帮助了一个系统独立于如何创建.组

设计模式 简单工厂+工厂方法+抽象工厂

简单工厂 简单工厂的优缺点: 缺点:①违反了OCP(开放-封闭原则).(当工厂内增加一个方法创建对象时候,需要在原来的工厂内,添加一个case语句).修改原来的类,是违反设计原则的. ②增加客户端和工厂类的耦合. 优点:①去除(非降低)客户端和具体产品的耦合.客户端和具体产品中间增加一个工厂类,增加客户端和工厂类的耦合. ②封装工厂类,实现代码多平台的复用性.创建对象的过程被封装成工厂类,可以多平台(控制台+WEB+Winform...手机端)调用这个工厂. ③封装工厂类,创建对象的过程(具体逻

简单工厂,抽象工厂,工厂方法区别

1.简单工厂: 简单工厂中的工厂类包含了逻辑判断,可以根据客户端的选择,来动态创建实例,去除了客户端对具体产品的依赖.注意简单工厂违背了设计模式中的开闭原则,所以说简单工厂并不属设计模式. 构成: 一个包含逻辑判断的具体工厂类: 一个抽象产品类,可以派生多个具体的产品类. 2.工厂方法模式: 定义一个抽象工厂类,在这个抽象工厂类中负责制定一些规范,将实际创建产品工作放到到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,相对于简单工厂来说可

简单工厂,抽象工厂,工厂模式三者的对照

简单工厂,抽象工厂,工厂模式三者的对照 作者: TindleWei 博客: http://blog.csdn.net/mennoa(转载请说明出处) GitHub: https://github.com/TindleWei 我想大家都熟悉工厂模式,可是要分清简单工厂.抽象工厂.工厂模式可能就没那么easy了.所以我查看了很多资料以及设计模式关于工厂模式的介绍,以下来总结一下. 前言 简单工厂,抽象工厂.工厂模式都属于创建型模式. 该模式的特点是抽象了实例化的过程.它们帮助了一个系统独立于怎样创建

工厂模式&amp;抽象工厂——HeadFirst设计模式学习笔记

当使用new实例化一个类时,使用的是实现,而不是接口,代码捆绑着具体类会导致代码更脆弱缺乏弹性,使用松耦合的OO模式可以得到解脱. 工厂:封装对象的创建,处理创建对象的细节 静态工厂:利用静态方法定义一个简单的工厂.优点:不需要创建工厂类的实例化.缺点:不能通过继承改变创建方法行为. 简单工厂:简单工厂并不是一种设计模式,因为只是简单的把创建对象的代码封装起来 工厂模式:在父类定义了一个创建对象的接口,通过让子类决定创建的对象是什么,来达到让对象创建的过程封装的目的.工厂方法让类把实例化推迟到子

简单工厂、工厂、抽象工厂

设计模式(2) --简单工厂模式 设计模式(3) --工厂方法模式 设计模式(4) --抽象工厂模式 设计模式之工厂模式 -- 简单工厂.工厂.抽象工厂 原文地址:https://www.cnblogs.com/plus301/p/8634253.html

创建和使用解耦——工厂模式详解(工厂方法+抽象工厂)

1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题.1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码.2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改.要使得系统具有的良好的可扩展性以及后期易于维护,必须实现对产品的获取和对产品的使用解耦.要做到这两点,首先要对客户端代码屏蔽掉创建产品的细节,其次,客户端必须面向产品的抽象编程,利用java的多态特性在运行时才确定具体的产品.而这,正