日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式 简单工厂模式

發(fā)布時間:2024/4/17 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式 简单工厂模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種GOF設(shè)計模式之一。簡單工廠模式是由一個工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現(xiàn).

簡單工廠模式結(jié)構(gòu)圖:

簡單工廠模式中的角色:

工廠(Creator)角色
簡單工廠模式的核心,它負(fù)責(zé)實現(xiàn)創(chuàng)建所有實例的內(nèi)部邏輯。工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。
抽象產(chǎn)品(Product)角色
簡單工廠模式所創(chuàng)建的所有對象的父類,它負(fù)責(zé)描述所有實例所共有的公共接口。
具體產(chǎn)品(Concrete Product)角色
是簡單工廠模式的創(chuàng)建目標(biāo),所有創(chuàng)建的對象都是充當(dāng)這個角色的某個具體類的實例。

引入實際情況:

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

例如:A類型的住戶租金額=天數(shù)*單價+績效*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.在抽象了商店之后,我們要對創(chuàng)建具體產(chǎn)品類,這里就是具體的類型商店,里面實現(xiàn)該商店的行為方法。

創(chuàng)建A類型的商店

//A類型的商店的創(chuàng)建public class Ashop:Ishop{/// <summary>/// /// A類型商店租金額,天數(shù)*單價+績效*0.005/// </summary>/// <param name="days">天數(shù)</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;}}

創(chuàng)建B類型的商店

/// <summary>/// B類型的商店的創(chuàng)建/// </summary>public class Bshop:Ishop{/// <summary>/// B類型商店的租金=月份*(每月價格+performance*0.001)/// </summary>/// <param name="month">月數(shù)</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);}}

3. 在創(chuàng)建號類型商店并實現(xiàn)方法后,思考在什么情況下如何創(chuàng)建那種對象,于是簡單工廠模式中最核心的部分:工廠類出來了

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("該商店不存在");}}}

4.???? 然后就根據(jù)當(dāng)前的商店類型進(jìn)行判斷,該類型的商店應(yīng)該進(jìn)行哪一種算法:

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元 日平均績效為2000Console.WriteLine("該A類型商店的租金為:" + total);Console.WriteLine("=============");Ishop Bs;factorymethod bfm = new factorymethod();Bs = bfm.CreateShow("bshop"); //b 類型的某商店total = Bs.Getrent(3, 3000, 60000); //3 月/4000元 月平均績效為60000Console.WriteLine("該B類型商店的租金為:" + total);Console.ReadKey();}}

到這里我們實現(xiàn)了客戶要求的兩種類型商店的算法的需求,但是作為一種好的設(shè)計架構(gòu),還應(yīng)該考慮到后面的需求變革,如果客戶現(xiàn)在又增加了C類型商店和D類型商店,它們的算法要求又不一樣,這個時候我們就需要進(jìn)行C,D類型商店的創(chuàng)建,并繼承Ishop接口,實現(xiàn)里面的方法,同時還得繼續(xù)修改工廠類在switc中增加case進(jìn)行捕捉創(chuàng)建相應(yīng)的商店對象,一旦出現(xiàn)這樣的情況,是不利于程序的擴展性和項目后期的維護(hù)性的。

優(yōu)點:

  • 簡單工廠模式能夠根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象。通過它,外界可以從直接創(chuàng)建具體產(chǎn)品對? 象的尷尬局面中擺脫出來。
  • 外界與具體類隔離開來,偶合性低。
  • 明確區(qū)分了各自的職責(zé)和權(quán)力,有利于整個軟件體系結(jié)構(gòu)的優(yōu)化。

缺點:

  • 工廠類集中了所有實例的創(chuàng)建邏輯,容易違反GRASPR的高內(nèi)聚的責(zé)任分配原則?
  • 雖然簡單工廠模式能夠適應(yīng)一定的變化,但是它所能解決的問題是遠(yuǎn)遠(yuǎn)有限的。它所能創(chuàng)建的類只能是事先教考慮到的,如果需要添加新的類,則就需要改變工廠類了。

?

轉(zhuǎn)載于:https://www.cnblogs.com/heyangyi/p/8531043.html

總結(jié)

以上是生活随笔為你收集整理的设计模式 简单工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。