工厂模式也用了不少,特别是MS的petshop中对数据库的访问,通过工厂模式可以达到自由切换SQL 和 Oracle 数据库。近来也在看设计模式的书,发现工厂模式还是有不少的扩展。结合书中的知识和我自己理解,从代码的角度来比较工厂模式各变种。

1:简单工厂模式:其作用是实例化对象而不需要客户了解这个对象属于那个具体的子类 。

using System;
using System.Collections;

public class MyClass
{
    public static void Main()
    {
        //通过参数来实例化子类。
        IVehicle vehicle = FactoryVehicle.CreateVehicle("car");
        vehicle.go();
        Console.ReadLine();    
    }
    
}

public class FactoryVehicle
{
    public static IVehicle CreateVehicle(string VehicleName)
    {
        switch(VehicleName.ToLower())
        {
            case "car":
            return new Car();
            case "boat":
            return new Boat();
            default:
            return new Car();
            
        }
    }

}
public interface IVehicle
{
    void go();
}
public class Car:IVehicle
{
    public void go()
    {
        Console.WriteLine("car");
    }
}
public class Boat:IVehicle
{
    public void go()
    {
        Console.WriteLine("boat");
    }
}

2:抽象工厂:即将工厂方法也抽象出来,由具体的子类来实例化工厂。产品创建部分和简单工厂模式相同。

using System;
using System.Collections;

public class MyClass
{
    public static void Main()
    {
        //通过定义的工厂来实例化。弊端是当产品很多时需要增加很多的工厂。代码重复。
        FactoryVehicle factory = new FactoryCar();
        IVehicle vehicle = factory.CreateVehicle();
        vehicle.go();
        Console.ReadLine();    
    }
    
}


public interface FactoryVehicle
{
     IVehicle CreateVehicle();

}

public class FactoryCar:FactoryVehicle
{
    public IVehicle CreateVehicle()
    {
        return new Car();
    }
}

public class FactoryBoat:FactoryVehicle
{
    public IVehicle CreateVehicle()
    {
        return new Boat();
    }
}

public interface IVehicle
{
    void go();
}

public class Car:IVehicle
{
    public void go()
    {
        Console.WriteLine("car");
    }
}

public class Boat:IVehicle
{
    public void go()
    {
        Console.WriteLine("boat");
    }
}

3:反射工厂模式: 其实就是通过反射的方式来获得具体实例化是那个类。

using System;
using System.Collections;
using System.Reflection;

public class MyClass
{
    public static void Main()
    {
        //使用反射的方法获得实例化的类
        IVehicle vechicle = ReflectFactory.CreateVehicleByReflect("Car");
        vechicle.go();
        Console.ReadLine();    
        
    }
    
}

public class ReflectFactory
{
    public static IVehicle CreateVehicleByReflect(string typeName)
    {
        Type type = Type.GetType(typeName);
        ConstructorInfo  ci = type.GetConstructor(System.Type.EmptyTypes);;
        return (IVehicle)ci.Invoke(null);
    }
}
public class FactoryBoat:FactoryVehicle
{
    public IVehicle CreateVehicle()
    {
        return new Boat();
    }
}

public class FactoryCar:FactoryVehicle
{
    public IVehicle CreateVehicle()
    {
        return new Car();
    }
}

public interface FactoryVehicle
{
    IVehicle CreateVehicle();

}
public interface IVehicle
{
    void go();
}

public class Car:IVehicle
{
    public void go()
    {
        Console.WriteLine("car");
    }
}

public class Boat:IVehicle
{
    public void go()
    {
        Console.WriteLine("boat");
    }
}

简单工厂模式,抽象工厂模式,反射工厂模式的代码总结相关推荐

  1. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

    园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博 ...

  2. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客前言 ...

  3. 工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 工厂模式于抽象工厂的区别 设计模式

    工厂模式 定义一个用于创建对象的接口,让子类实现具体类的创建.工厂将类的实例化延迟的子类. 良好的分装性.对于具体产品,只要知道产品名称即可(类名或字符串),封闭了对产品创建的细节. 屏蔽具体产品类. ...

  4. java 三种工厂模式(简单工厂+工厂方法+抽象工厂)

    一.简单工厂模式 概述   简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的 实例,被创建的实例通常都具有共同的父类.因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因 ...

  5. 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

    一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...

  6. 简单工厂模式,工厂方法模式,抽象工厂模式,spring的狂想

    菜鸟D在项目中遇见一个比较纠结的高耦合,所以就想办法来解耦.情况是这样的:系统通过用户选择treeview控件的节点判断调用不同的处理,这些处理中某些东西又是类似的.同事的建议是采用简单工厂,耦合就耦 ...

  7. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  8. C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)

    今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军.吕震宇 老师的文章更是堪称经典.他们的文笔如行云流水,例子活泼生动,讲解深入浅出.好在他们都是用C ...

  9. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

    工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面 ...

最新文章

  1. webservice中cxf框架的HelloWord
  2. oracle cost cardinality,ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
  3. Spring boot重定向请求
  4. Python Django 生成随机字符串UUID的使用示例
  5. oracle定时删库,Oracle数据库如何定期正确删除archivelog文件
  6. pdf保存如何带批注_带有批注的SpringSelenium测试
  7. excel单元格斜线_怎么在excel中画斜线?怎么在excel表格中画斜线?
  8. 信息学奥赛一本通(1009:带余除法)
  9. 花书+吴恩达深度学习(九)优化方法之二阶近似方法(牛顿法, CG, BFGS, L-BFGS)
  10. Redis开源文档《Redis设计与实现》
  11. 树形背包O(n * v^2)入门
  12. pdf在线翻译_网页版pdf转换器|pdf转换word免费
  13. 年薪201W!华为新天才少年出炉:武大94年博士生入选!任正非最新发声:江山代有才人出,不拘一格降人才!...
  14. Win 95 使用技巧
  15. 博弈论(四)——#10246. 「一本通 6.7 练习 3」取石子
  16. 无线传感器网络技术原理及应用 许毅编著(转载请注明出处---https://www.cnblogs.com/qingl)...
  17. 论文笔记(显微图像拼接)——A fast algorithm for material image sequential stitching
  18. java校验特殊字符_java 中文及特殊字符校验
  19. Mysql 主从间延迟,主从切换策略
  20. ipad中的神级笔记软件 Notability的使用方法

热门文章

  1. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
  2. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
  3. 【错误记录】Flutter 报错 ( Dart SDK is not configured )
  4. 【Flutter】Flutter 自定义字体 ( 下载 TTF 字体 | pubspec.yaml 配置字体资源 | 同步资源 | 全局应用字体 | 局部应用字体 )
  5. 【组合数学】组合数学简介 ( 组合数学脉络 | 组合数学技巧 | 组合思想 1 : 一一对应 )
  6. 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com
  7. windows linux 通过SSH X11Forwrding 使用图形化界面
  8. Informatica ETL workflow 定时运行功能介绍 scheduler
  9. android ImageButton的图片怎么定义?
  10. JMS详细的工作原理