工厂模式

来源:互联网 发布:淘宝怎么申请卖保健品 编辑:程序博客网 时间:2024/05/16 11:49

抽象工厂模式

    1.

     关于返回值,方法都要有返回值,不需要返回值时,在方法前使用void来表明无返回值,

在这段代码中,接口 IUser中方法Insert就标明了void所以无返回值,只有输出,而GetUser方法就没有声明为void,所以除了有输出为,还要有返回值。

     2.

      针对参数的问题,变量可以作为参数,类也可以作为参数,但是针对的对象就不一样了,如果用类做参数,那么操作对象就是针对的类,对类进行相应的操作,而如果是参数变量,那么针对的就是简单的参数变量。像接口IUser第一个方法针对的就是User类,那么他就是针对的类User,对类User进行相应的操作,第二个方法针对的时类中的一个参数:id,那么接下 来的操作就是针对这个参数的。

      但是前提时要声明他的类型。(关于这点,在VB基于对象的过程中没有涉及到,在VB中好像只是设计到了变量的类型,而在这里要更多的涉及到对象类型,即针对对象,对象也是类型。就像id的的方法GetUser的类型就是User)。再一点就是方法声明的自由性,这点很有意思,只要指明了类型,那么针对这个类型的方法就可以自由设置,至于怎样去调用这个方法,那就要看接下来的类或是程序怎样去实现,就像GetUser就是基于基于类型User的一个被声明了的方法,在接下来的实例化的类中就对他进行了相应的操作哟,并且对返回值进行了相应的处理,即Return null。再有若一个类依赖于另一个类,要对另一个类要进行操作,那么在基于方法的基础上,一种情况是方法的类型跟关联的类是一致的,再一种情况是,方法的该方法的参数是该要进行操纵的类。

      3.

      在依赖与被依赖的关系的两个类中,其实就是类型的调用

这段代码是工厂模式,这里用到了接口的实现,一个接口,两个实现类,接口和这两个实现类都是依赖于IUser类,那么在声明变量和方法的时候就要IUser就是他们的方法类型,即他们是针对IUser的,这样很多事情就可以解释了,类与类之间很多的关系其实就是类型的引入与使用,方法只是被定义的过程,而这个过程就被用来实现对这个类型的相应的处理(通过返回值)

      4.针对实例化的问题,接口与父类被实现或继承,在实例化的时候,他们的类型是同一个即接口或父类,这样在实例化的时候就显得特别清楚,一目了然,知道他们是哪一类型的。

        

      例如在这段代码中,就是按照这个模式来的,SqlServerFactory(子类)类的类型是IFactory(父类),方法CreateUser的返回值是类SqlServerUser,那么他的类型必然是IUser(接口),那么他的前面要标明他的类别IUser.

      5.关于方法的调用。在所有的类的掉用与被调用的过程完成之后,就是针对具体的类的操作了,这是会具体方法的使用,这点跟VB差不多,都是*.方法的格式,他是带有参数的,输入这些参数,然后改方法就会对相应的参数进行实际操作,从而产生出具体的结果。例如上面的照片,iu.Inset()的参数就是user,那么他的操作就是针对的user,从而产生一个与user有关的结果,而GetUser()的参数是1,那么该方法的操作产生的结果就是针对1的结果。 

     6.再一点关于抽象工厂模式,就是如果有多个并列的类,需要工厂来生产,那么就采用并列的方法,这点要在工厂类型类编进行相应的添加,同样在调用的时候先实例化相应的要被操作的类,而后实例化相应的工厂,在调用工厂中的方法,在这里方法可以相应地调用,亦可以不去调用(就看自己使用的情况了)。

    7.简单工厂模式好像还不如工厂模式有力。虽然抽象工厂模式的的开放-封闭原则把握得很好,但是简单工厂更精简,减少了很多个工厂类,这样很省事。

   8.关于虚方法和复写的使用,在父类中,声明的方法没有具体的过程(有返回值),这样的方法就是虚方法虚方法要用virtual标明,但是在实例化的时候,注意他的子类要使用复写的方法来实现对虚方法的实现,VS平台会自动地将该方法显示处出来,这样就实现了方法的付复写。

在这里就用到了virtual和override两个关键字。从这段代码中也可以看到,base关键字的使用个,base关键字用来访问父类中的成员,这里就是访问了父类中的GetResult()方法。这三个关键字是常用的。

       9.关于在C#中等于的使用,在VB中等于和赋值同是“=”,但是在C#中,等于是“==”,两个等号,赋值是“=”,一个等号。

       10.关于控制台的输出问题,这要用到两个语句:一个是Console.WriteLine();一个是Console.Read();这样输出结果就显示在了控制台程序的窗口上了。

       11.关于简单工厂模式、工厂模式和抽象工厂模式。首先简单工厂模式通过一个工厂类,使用Switch语句来实现工厂的具体类的实现,而工厂模式更详细具体,就是定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化推迟到了其子类,而不是通过Switch语句来进行判断。而抽象工厂方法就更综合和抽象一些了,他是提供一个创建一系列相关或相互依赖对象的接口,而无需指定他么具体的类,其实还是指定了,只不过是将类综合了起来,这样用的时候就一并全下来了。