本篇內容主要講解“.NET簡單的工廠模式講解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“.NET簡單的工廠模式講解”吧!

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

角色分類:
工廠(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類型商店的創建,并繼承Ishop接口,實現里面的方法,同時還得繼續修改工廠類在switc中增加case進行捕捉創建相應的商店對象,一旦出現這樣的情況,是不利于程序的擴展性和項目后期的維護性的。
優點:
簡單工廠模式能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。通過它,外界可以從直接創建具體產品對 象的尷尬局面中擺脫出來。
外界與具體類隔離開來,偶合性低。
明確區分了各自的職責和權力,有利于整個軟件體系結構的優化。
缺點:
工廠類集中了所有實例的創建邏輯,容易違反GRASPR的高內聚的責任分配原則
雖然簡單工廠模式能夠適應一定的變化,但是它所能解決的問題是遠遠有限的。它所能創建的類只能是事先教考慮到的,如果需要添加新的類,則就需要改變工廠類了。
到此,相信大家對“.NET簡單的工廠模式講解”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯建站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
網頁題目:.NET簡單的工廠模式講解-創新互聯
當前鏈接:http://www.js-pz168.com/article46/djojhg.html
成都網站建設公司_創新互聯,為您提供面包屑導航、營銷型網站建設、網站設計、外貿網站建設、網頁設計公司、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯