.Net学习 第2季10 简单工厂设计模式

.Net 视频学习第2季 简单工厂设计模式

设计模式就是解决一类问题的设计方案,有人总结了23种常见的设计模式,简单工厂是其中一种。

一个简单的工厂会生产不同的商品,例如笔记本工厂会生产不同品牌的笔记本,而客户需要哪一款需要通过询问客户才能得知。简单工厂设计模式的核心就是,尽可能屏蔽各个品牌笔记本的差异,消除其带来的代码冗余,

返回一个笔记本的父类,里面装的是子类对象,通过抽象类来实现多态。

例如,笔记本工厂生产4种品牌的笔记本A,B,C,D,如果不用笔记本父类,在main方法中先询问客户需要哪一款,再返回对应的对象,代码就会类似下面的

class Notebook A{}

class Notebook B{}

class Notebook C{}

class Notebook D{}

main(){    Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");    std::string type = Console.ReadLine();    switch (type)    {        case "A":            NotebookA nb = new NotebookA();            break;        case "B":            NotebookB nb = new NotebookB();            break;        case "C":            NotebookC nb = new NotebookC();            break;
        case "D":            NotebookD nb = new NotebookD();            break;    }}

想象一下,如果接下来还要对这个具体的笔记本进行操作,例如读取它的指标,价格,生产所需时间之类,由于主方法里边是一个具体类型的笔记本类的对象,因此这些操作都得switch/case来做,代码冗余很严重,例如每个笔记本都有一个display的方法用于展示自己的参数,代码类似如下。

class Notebook A{display(){...}}

class Notebook B{display(){...}}

class Notebook C{display(){...}}

class Notebook D{display(){...}}

main(){    Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");    std::string type = Console.ReadLine();    switch (type)    {        case "A":            NotebookA nb = new NotebookA();            nb.display();            break;        case "B":            NotebookB nb = new NotebookB();            nb.display();            break;        case "C":            NotebookC nb = new NotebookC();            nb.display();            break;        case "D":            NotebookD nb = new NotebookD();            nb.display();            break;    }}

会发现,同样的一句说话nb.display();写了4遍。

如果选择用多态来实现,主方法里边就只有笔记本父类的对象(当然实际上它装的还是某一个子类的对象),而接下来的操作,只需要调用父类的方法即可(当然实际上方法会被子类方法重写)。需要创建一个笔记本的父类,代码类似如下

abstract class Notebook{    public void display();}
class NotebookA:Notebook{display(){...}}
class NotebookB:Notebook{display(){...}}
class NotebookC:Notebook{display(){...}}
class NotebookD:Notebook{display(){...}}

main(){    Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");    std::string type = Console.ReadLine();    Notebook nb;    switch (type)    {        case "A":            nb = new NotebookA();            break;        case "B":            nb = new NotebookB();            break;        case "C":            nb = new NotebookC();            break;        case "D":            nb = new NotebookD();            break;    }    nb.display();}

用简单工厂设计模式来实现,就可以减少代码冗余了。

简单地说,如果有N个子类,不采用多态,同一个操作,在主方法里边要写N遍(写N个子类调用方法),用多态,在主方法里边只用写一遍(调用父类方法,该方法被子类重写)。简单工厂设计模式的核心就是当不清楚客户需要什么子类对象的时候,返回一个父类对象给客户,里边装的是什么子类对象取决于访问客户的结果。

时间: 2024-08-22 21:05:28

.Net学习 第2季10 简单工厂设计模式的相关文章

学习笔记之简单工厂设计模式

工厂设计模式:根据一定的逻辑来负责对象的生产. 简单工厂设计模式:又称为静态工厂方法模式,由一个工厂类,根据传人的参数决定生产哪一种对象 三种角色:工厂角色,抽象产品角色,具体产品角色 故事:水果农场生产水果(苹果和香蕉),一个顾客直接去农场买水果 首先抽象角色: 水果接口 public interface IFruit { void growth(); } 具体产品角色:苹果,香蕉 public class Apple implements IFruit { public void growt

简单工厂设计模式

说起设计模式,不得不从最简单的简单工厂设计模式开始说起. 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常具有共同的父类.因为简单工厂模式中用于创建的方法是静态的,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,属于类创建型模式. 首先我们先看看下面这个类图: 在这个类图中,我们可以发现,静态工厂一共有三个对象是不可缺少的 1公共父类(Fruit接口) 2具体的产品类(Apple, Banana) 3静态工厂类(Simp

接口和简单工厂设计模式

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 接口: 接口就是纯抽象类的演变,实现接口的类都必须实现接口的的方法.接口里全部都是方法的声明,没有方法的实现. 接口里的方法都是public修饰的,就算不写public关键字,也是默认public的,里面的申请的属性 全部都是public 静态常量,接口里没有构造器,静态块和实例块. 例如: 在c这种面向对象的编程语言中也有抽象类,但是要求的不严格,c要求的

iOS常用设计模式——简单工厂设计模式

简单工厂设计模式详解 简单工厂设计模式详解 基本概念 结构图 经典的示例 示例代码 优点 缺点 使用条件 基本概念 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 结构图 ConcreteProduct1和ConcreteProduct2两个产品具有一个共同的父类IProject,简单工厂类为SimpleFactory,负责根据传入的不同参数来决定生产ConcreteProduct

大话设计模式--第一章 简单工厂设计模式

简单工厂设计模式 案例: 写一个计算器, 实现加减乘除. 第一步: 写一份简单的代码 package com.chapter1; public class Caculator1 { public static void main(String[] args) { if(args.length < 3){ System.out.println("参数个数异常"); return ; } Double num1 = Double.parseDouble(args[0]); Doubl

设计模式学习笔记(二)--简单工厂模式和工厂模式

老生长谈的两个设计模式了,这里把这两个设计模式对比着来总结一下. 什么是简单工厂模式? 简单工厂模式:根据传入工厂类的参数动态决定要创建哪一个产品类的实例. UML图如下(以实现一个计算器为例): 简单工厂模式的Java代码实现如下: 1 package designPattern; 2 /** 3 * 简单工厂模式 4 * @author yiRain 5 * 6 */ 7 public class SimpleFactory { 8 9 public static void main(Str

C#之三十八 简单工厂设计模式

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现,学习了此模式可以为

简单工厂设计模式--Java设计模式(一)

一 概念: 简单工厂模式就是通过一个工厂类根据参数动态创建对应的类. 二 案例 我们以汽车作为例子,在现实生活中汽车只是一个抽象的产品,其中有很多类型的汽车才是具体产品,如奔驰.宝马.保时捷等等(当然每个品牌下还有各种版本,这就不做讨论了,假设每个品牌就对应一种车).简单类图如下: 当我们去综合类型的店买车要试开车时,销售员可能最简单直接的方法就是直接拿出他们最畅销的车子出来让你试驾.简易代码如下: public class CarTest { public static void main(S

使用javascript完成一个简单工厂设计模式。

在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式: 常用对象方法创建和调用 var BallShop = function(){}; BallShop.prototype = { sellBall : function(model){