首頁 後端開發 C#.Net教程 .NET簡單工廠模式解說

.NET簡單工廠模式解說

Dec 20, 2016 pm 01:19 PM
簡單工廠模式

簡單工廠模式介紹:

簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建哪一種產品類別的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。

結構模式圖:

.NET簡單工廠模式解說

角色分類:

工廠(Creator)角色
簡單工廠模式的核心,它負責實現所有實例的內部邏輯。工廠類別的創建產品類別的方法可以被外界直接調用,創建所需的產品物件。

抽象產品(Product)角色
簡單工廠模式所建立的所有物件的父類,它負責描述所有實例所共有的公共介面。

具體產品(Concrete Product)角色
是簡單工廠模式的創建目標,所有創建的物件都是充當這個角色的某個具體類別的實例。

引入實際情況:

如果有一個住戶管理系統,裡面的住戶類型是可變的,每一種租戶類型的租金計算公式都存在差異

A類型的住戶租金額=天數*單價+績效*0.005

B類型的住戶租金額=月份*(每月價格+performance*0.001)

分析:

1. 商店存在共有的計算方法,這是實體商店的行為,然而他們的行為的方式不一樣,所有我們抽象商店類,代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.IFactroy
{
   
  public interface Ishop
  {
    double Getrent(int days, double dayprice, double performance);
  }
}
登入後複製

   

2.在抽象了商店之後,我們要對創建具體產品類,這裡就是具體的類型商店,裡面實現該商店的行為方法。創建A類型的商​​店

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.product
{
  //A类型的商店的创建
  public class Ashop:Ishop
  {
    /// <summary>
    /// /// A类型商店租金额,天数*单价+绩效*0.005
    /// </summary>
    /// <param name="days">天数</param>
    /// <param name="dayprice">每天单价</param>
    /// <param name="performance">日平均绩效</param>
    /// <returns></returns>
    public double Getrent(int days, double dayprice, double performance)
    {
      Console.WriteLine("A商店的租金算法");
      return days * dayprice + performance * 0.01;
    }
  }
}
登入後複製

   

3.創建B類型的商店:

using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.product
{
  /// <summary>
  /// B类型的商店的创建
  /// </summary>
  public class Bshop:Ishop
  {
     
    /// <summary>
    /// B类型商店的租金=月份*(每月价格+performance*0.001)
    /// </summary>
    /// <param name="month">月数</param>
    /// <param name="monthprice">月单价</param>
    /// <param name="performance">月平均绩效</param>
    /// <returns></returns>
    public double Getrent(int month, double monthprice, double performance)
    {
      Console.WriteLine("B商店的租金算法");
      return month * (monthprice + performance * 0.001);
    }
  }
}
登入後複製

   

4. 在創建號於是簡單工廠模式中最核心的部分:工廠類別出來了

using SimpleFactory.App.IFactroy;
using SimpleFactory.App.product;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App.factoryMethod
{
  public class factorymethod
  {
    public Ishop CreateShow(string show)
    {
      switch (show.Trim().ToLower())
      {
        case"ashop":
          return new Ashop();
        case "bshop":
          return new Ashop();
        default:
          throw new Exception("该商店不存在");
      }
    }
  }
}
登入後複製

   

5.然後就根據當前的商店類型進行判斷,該類型的商店應該進行哪一種算法:

using SimpleFactory.App.factoryMethod;
using SimpleFactory.App.IFactroy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SimpleFactory.App
{
  class Program
  {
    static void Main(string[] args)
    {
      Ishop As;
      factorymethod afm = new factorymethod();
      As = afm.CreateShow("ashop"); //a 类型的某商店
      double total = As.Getrent(30, 300, 2000);   //30 天/100元 日平均绩效为2000
      Console.WriteLine("该A类型商店的租金为:" + total);
 
      Console.WriteLine("=============");
 
      Ishop Bs;
      factorymethod bfm = new factorymethod();
      Bs = bfm.CreateShow("bshop"); //b 类型的某商店
      total = Bs.Getrent(3, 3000, 60000);     //3 月/4000元 月平均绩效为60000
      Console.WriteLine("该B类型商店的租金为:" + total);
      Console.ReadKey();
    }
  }
}
登入後複製

   

到這裡我們實現了客戶要求的兩種類型商店的演算法的需求,但是作為一種好的設計架構,還應該考慮到後面的需求變革,如果客戶現在又增加了C類型商店和D類型商店,它們的演算法要求又不一樣,這個時候我們就需要進行C,D類型商店的創建,並繼承Is​​hop接口,實現裡面的方法,同時還得繼續修改工廠類在switc中增加case進行捕捉創建相應的商店對象,一旦出現這樣的情況,是不利於程序的擴展性和專案後期的維護性的。

優點:

簡單工廠模式能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。透過它,外界可以從直接創造特定產品對  象的尷尬局面中擺脫出來。

外界與具體類隔離開來,偶聯性低。

明確區分了各自的職責和權力,有利於整個軟體體系結構的最佳化。

缺點:

工廠類別集中了所有實例的創建邏輯,容易違反GRASPR的高內聚的責任分配原則

雖然簡單工廠模式能夠適應一定的變化,但是它所能解決的問題是遠遠有限的。它所能創建的類別只能是事先教考慮到的,如果需要添加新的類,則需要改變工廠類了。

出現的上訴情況,應該如何解決,值得思考,將在下一個工廠方法模式中得到很好的解決。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
如何在PHP中應用簡單工廠模式來提高程式碼的復用性 如何在PHP中應用簡單工廠模式來提高程式碼的復用性 Sep 05, 2023 pm 12:27 PM

如何在PHP中應用簡單工廠模式來提高程式碼的複用性簡單工廠模式(SimpleFactoryPattern)是一種常用的設計模式,可以在創建物件時提供一種統一的接口,以便根據不同的條件來創建不同的實例。這種模式可以有效降低程式碼的耦合度,提高程式碼的可維護性和重複使用性。在PHP中,我們可以利用簡單工廠模式來最佳化程式碼的結構和邏輯。理解簡單工廠模式簡單工廠模式由三個

如何透過PHP物件導向簡單工廠模式實現物件的版本控制與管理 如何透過PHP物件導向簡單工廠模式實現物件的版本控制與管理 Sep 06, 2023 pm 02:39 PM

如何透過PHP物件導向簡單工廠模式實現物件的版本控制和管理在開發大型的、複雜的PHP專案時,版本控制和管理是非常重要的一環。透過適當的設計模式,我們可以更好地管理和控制物件的創建和使用,從而提高程式碼的可維護性和擴展性。本文將介紹如何使用PHP物件導向簡單工廠模式來實現物件的版本控制與管理。簡單工廠模式是一種創建類別的設計模式,它透過一個工廠類別來實例化指定的對象

Java工廠模式的三種設計方法探究 Java工廠模式的三種設計方法探究 Feb 18, 2024 pm 05:16 PM

探索Java工廠模式的三種設計想法工廠模式是一種常用的設計模式,用於建立物件而無需指定特定的類別。在Java中,工廠模式可以透過多種方式實現。本文將探討基於不同設計思路的三種Java工廠模式的實作方式,並給出具體的程式碼範例。簡單工廠模式簡單工廠模式是最基本的工廠模式,它透過一個工廠類別來建立物件。工廠類別根據客戶端的請求參數來決定應該建立哪種特定物件。下面是一個簡

如何使用PHP物件導向簡單工廠模式建立可測試的物件實例 如何使用PHP物件導向簡單工廠模式建立可測試的物件實例 Sep 05, 2023 pm 02:45 PM

如何使用PHP物件導向簡單工廠模式建立可測試的物件實例簡單工廠模式是一種常用的軟體設計模式,它可以幫助我們根據不同的條件建立不同的物件實例。在PHP物件導向程式設計中,結合簡單工廠模式可以提高程式碼的可測試性和可維護性。在本文中,我們將學習如何使用PHP物件導向簡單工廠模式建立可測試的物件實例。我們將以一個簡單的範例來說明這個過程。首先,讓我們定義一個介面來表示要

深入探討Java工廠模式的實作與應用 深入探討Java工廠模式的實作與應用 Feb 24, 2024 pm 10:15 PM

Java工廠模式的原理與應用詳解工廠模式是一種常用的設計模式,它用於創建對象,以及將對象的創建過程封裝起來。 Java中的工廠模式有多種實作方式,其中最常見的有簡單工廠模式、工廠方法模式和抽象工廠模式。本文將詳細介紹這三種工廠模式的原理和應用,並給出對應的程式碼範例。一、簡單工廠模式簡單工廠模式是最簡單、最常用的工廠模式。它通過一個工廠類,根據傳入的參數來返回不

如何在PHP中應用簡單工廠模式來實現物件的自動化創建 如何在PHP中應用簡單工廠模式來實現物件的自動化創建 Sep 05, 2023 pm 02:27 PM

如何在PHP中應用簡單工廠模式來實現物件的自動化創建簡單工廠模式是一種常見的設計模式,它用於創建物件並抽象化了實例化物件的過程。在PHP中,應用簡單工廠模式可以幫助我們將物件的建立和具體實作解耦,使程式碼更加靈活和可維護。在本文中,我們將使用一個範例來說明如何在PHP中應用簡單工廠模式。假設我們有一個電子產品店,它銷售手機和電視機。我們需要根據用戶的選擇來創建相

如何使用PHP物件導向簡單工廠模式建立物件實例 如何使用PHP物件導向簡單工廠模式建立物件實例 Sep 05, 2023 pm 02:09 PM

如何使用PHP物件導向簡單工廠模式建立物件實例在PHP開發中,物件導向程式設計是一種常見的程式設計範式。物件導向的程式設計思想可以讓程式碼結構更加清晰、可維護性更高。而且,使用設計模式可以進一步提高程式碼的靈活性和重複使用性。本文將介紹如何使用PHP的物件導向簡單工廠模式來建立物件實例。簡單工廠模式是一種創建型設計模式,它透過一個單獨的類別來負責創建其他類別的物件。這個單獨的類別通常

如何透過PHP物件導向簡單工廠模式實現物件的多態性 如何透過PHP物件導向簡單工廠模式實現物件的多態性 Sep 05, 2023 am 08:43 AM

如何透過PHP物件導向簡單工廠模式實現物件的多態性簡單工廠模式是一種常見的設計模式,它可以透過一個共同的工廠類別來創建不同類別的對象,並且隱藏了物件的創建過程。 PHP物件導向簡單工廠模式可以幫助我們實現物件的多態性。簡單工廠模式包含三個基本角色:工廠類別、抽象類別和具體類別。首先我們來定義一個抽象類別Animal,它包含一個抽象方法say():abstractclas

See all articles