Asp.Net 设计模式 之 “工厂方法”即利用 接口 实现的抽象工厂

  • 主要改动部分:

/// <summary>
    /// 6.创建工厂方法模式(抽象工厂:接口)
    /// </summary>
    interface IFactory    //父接口(父类工厂)
    {
        /// <summary>
        /// 此父接口提供一个无参的函数方法
        /// </summary>
        /// <returns></returns>
        Operation CreateOperation();
    }
    /// <summary>
    /// 定义子类工厂,并继承父类工厂(父接口)
    /// </summary>
    class FactoryAdd : IFactory
    {
        /// <summary>
        /// 封装与父类工厂同名函数(返回值类型亦相同)
        /// </summary>
        /// <returns></returns>
        public Operation CreateOperation()
        {
            //返回上面OperationAdd子类
            return new OperationAdd();
        }
    }

  • 源码:
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6
  7 namespace FactoryModel
  8 {
  9     //====================使用C#,利用简单工厂模式,实现简单的计算器功能====================
 10     //考察时知识点:面向对象三大特性——继承、封装、多态
 11     /// <summary>
 12     /// 1.定义父类,同时也是一个封装
 13     /// </summary>
 14     class Operation
 15     {
 16         //2.因为要让子类能够对父类进行访问,故应要将参数定义为受保护的变量类型
 17         protected int numberA;
 18         protected int numberB;
 19         //定义属性(必写)
 20         public int NumberA
 21         {
 22             get { return numberA; }
 23             set { numberA = value; }
 24         }
 25         public int NumberB
 26         {
 27             get { return numberB; }
 28             set { numberB = value; }
 29         }
 30         //3.封装虚方法,以供子类进行重写
 31         public virtual int getResule()
 32         {
 33             int result = 0;
 34             return result;
 35         }
 36     }
 37     /// <summary>
 38     /// 4.定义子类,继承父类,并对父类进行重写(加法)
 39     /// </summary>
 40     class OperationAdd : Operation
 41     {
 42         public override int getResule()
 43         {
 44             return numberA + numberB;
 45         }
 46     }
 47     /// <summary>
 48     /// 5.定义子类,继承父类,并对父类进行重写(减法)
 49     /// </summary>
 50     class OperationSub : Operation
 51     {
 52         public override int getResule()
 53         {
 54             return numberA - numberB;
 55         }
 56     }
 57     /// <summary>
 58     /// 6.创建工厂方法模式(抽象工厂:接口)
 59     /// </summary>
 60     interface IFactory    //父接口(父类工厂)
 61     {
 62         /// <summary>
 63         /// 此父接口提供一个无参的函数方法
 64         /// </summary>
 65         /// <returns></returns>
 66         Operation CreateOperation();
 67     }
 68     /// <summary>
 69     /// 定义子类工厂,并继承父类工厂(父接口)
 70     /// </summary>
 71     class FactoryAdd : IFactory
 72     {
 73         /// <summary>
 74         /// 封装与父类工厂同名函数(返回值类型亦相同)
 75         /// </summary>
 76         /// <returns></returns>
 77         public Operation CreateOperation()
 78         {
 79             //返回上面OperationAdd子类
 80             return new OperationAdd();
 81         }
 82     }
 83     /// <summary>
 84     /// 定义子类工厂,并继承父类工厂(父接口)
 85     /// </summary>
 86     class FactorySub : IFactory
 87     {
 88         /// <summary>
 89         /// 封装与父类工厂同名函数(返回值类型亦相同)
 90         /// </summary>
 91         /// <returns></returns>
 92         public Operation CreateOperation()
 93         {
 94             ////返回上面OperationAdd子类
 95             return new OperationSub();
 96         }
 97     }
 98     //7.主函数中进行调用
 99     class Program
100     {
101         static void Main(string[] args)
102         {
103             //进行加法运算,指定相应的工厂类型即可,无须再次输入运算类型
104             IFactory i = new FactorySub();
105             //进行减法运算
106             //IFactory ii = new FactorySub();
107             Operation op = i.CreateOperation();
108             op.NumberA = 10;
109             op.NumberB = 30;
110             //调用子类中的方法来获取结果
111             int result = op.getResule();
112             Console.WriteLine(result);
113             Console.ReadKey();
114         }
115         //如果在后续的编程中仍需要有其他的运算,则只需要在子类中加上相应的子类,
116         //并在工厂方法中中加上相应的工厂类即可即可,无须需改代码,这也就是工厂方法(抽象工厂)的“利”所在
117     }
118 }
时间: 2024-10-09 00:02:36

Asp.Net 设计模式 之 “工厂方法”即利用 接口 实现的抽象工厂的相关文章

浅析设计模式(六)——创建型模式之Abstract-Factory(抽象工厂模式)

抽象工厂模式Abstract-Factory 本文的套路: 抽象工厂模式的定义 抽象工厂模式的参与者及其角色 抽象工厂模式的类图 抽象工厂模式的示例 参考 抽象工厂模式的定义 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 前面[浅析设计模式(四)--创建型模式之Simple-Factory(简单工厂方法,非设计模式)]中介绍的简单工厂方法,虽然已经对变化的部分进行了封装,但是这里只由一个对象负责所有的具体类的实例化,因此每次有新增对象类型时,都需要改变工厂的源码进行扩展.

2,抽象工厂模式(Abstract Factory Pattern) 抽象工厂可以一下生产一个产品族(里面有很多产品组成)

备注    工厂模式:要么生产香蕉.要么生产苹果.要么生产西红柿:但是不能同时生产一个产品组. 抽象工厂:能同时生产一个产品族.===>抽象工厂存在原因 解释 :    具体工厂在开闭原则下,                能生产香蕉/苹果/梨子;  (产品等级结构) 抽象工厂:在开闭原则下,               能生产:南方香蕉/苹果/梨子 (产品族)  北方香蕉/苹果/梨子 重要区别:              工厂模式只能生产一个产品.(要么香蕉.要么苹果)            

类与接口的继承 接口与抽象类 抽象工厂

为什么Java里面只允许单一继承,但允许实现多个接口? 1,接口可以继承多个接口.为什么不能实现类的多继承?主要是防止多个类有相同的方法名,然而方法体不一样,子类就比较难选择了.所以java和C#不支持类的多继承2,允许具有多个接口的一个好处就是,当实现多个接口时,如果两个接口有同样的方法,那么实现一次就可以了.由于接口没有方法体,所以接口可以实现多继承. 如何间接实现类的多重继承? 1.可以通过继承多个接口实现多重继承. 2.A -> B -> C .

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

?在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 分类 ?工厂模式主要是为创建对象提供过渡接口,以便将创建对象的

设计模式【工厂方法模式】

本文介绍设计模式中的[工厂模式].首先介绍工厂模式的作用,工厂模式主要是为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 其中一些资料会将工厂模式,分为三类,这三类的分类为: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 但是某些资料会将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类.所以分为:工厂方法模式(F

(转)设计模式(五)简单工厂模式+工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和

iOS设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂的生活场景,卖早点的小摊贩,他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂,它生产包子,馒头,地沟油烙的煎饼.该场景对应的UML图如下所示: 图1:简单工厂模式UML图 简单工厂模式的参与者: 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口.可是抽象类或接口. 具体产品(Conc

iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下所示: 代码结构如下 Animal 类 @interface Animal :NSObject @proterty(nonatomic,strong) NSString *name; -(void)laugh; @end Dog类 @interface Dog:Animal @end Cat类 @i

简单工厂模式、工厂方法模式和抽象工厂模式-设计模式学习

1.简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有