程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 面向對象編程模式之“簡單工廠和單例“,面向對象編程工廠

面向對象編程模式之“簡單工廠和單例“,面向對象編程工廠

編輯:C#入門知識

面向對象編程模式之“簡單工廠和單例“,面向對象編程工廠


簡單工廠模式 (Simple Factory Pattern):

      定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。

 

      在簡單工廠模式中用於創建實例的方法通常是靜態(static)方法,因此又被稱為靜態工廠方法(Static Factory Method)模式

     要點:如果需要什麼,只需要傳入一個正確的參數,就可以獲取所需要的對象,而無須知道其創建細節。

 

用代碼來實現就是: 

    簡單工廠模式包含以下3個角色:

      Factory(工廠角色)

      Product(抽象產品角色)

      ConcreteProduct(具體產品角色)

//典型的抽象產品類代碼:
abstract class Product
{
     //所有產品類的公共業務方法
public void MethodSame() 
{
    //公共方法的實現
}

//聲明抽象業務方法
public abstract void MethodDiff();
}

 

//典型的具體產品類代碼:
class ConcreteProductA : Product
{
    //實現業務方法
    public override void MethodDiff()
    {
        //業務方法的實現
    }
}

 

//典型的工廠類代碼:
class Factory
{
    //靜態工廠方法
    public static Product GetProduct(string arg)
    {
        Product product = null;
        if (arg.Equals("A"))
        {
            product = new ConcreteProductA();
            //初始化設置product
        }
        else if (arg.Equals("B"))
        {
            product = new ConcreteProductB();
            //初始化設置product
        }
        return product;
    }
}

 

//客戶端代碼:
class Program
{
    static void Main(string[] args)
    {
        Product product;
        product = Factory.GetProduct("A"); //通過工廠類創建產品對象
        product.MethodSame();
        product.MethodDiff();
    }
}
//兩個類A和B之間的關系應該僅僅是A創建B或者是A使用B,而不能兩種關系都有。將對象的創建和使用分離,使得系統更加符合單一職責原則,有利於對功能的復用和系統的維護。


 

 

 單例模式 (singleton pattern):

        即一個類只有一個實例化對象,並提供一個全局訪問點來訪問這個實例。

        1.該類只能有一個實例。

        2.必須自行創建這個實例。

        3.必須自行向整個系統提供這個實例。

單例模式的結構:

 

 單例模式的實現方式:      1.私有構造函數         2.靜態私有成員變量(自身類型)         3.靜態公有的工廠方法

 

// 單例模式的實現方式
class Singleton { private static Singleton instance=null; //靜態私有成員變量 //私有構造函數 private Singleton() { } //靜態公有工廠方法,返回唯一實例 public static Singleton GetInstance() { if(instance==null) instance=new Singleton(); return instance; } }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved