Factory Method Factory 方法

來源:互聯網
上載者:User

從耦合關係談起
      耦合關係直接決定著軟體面對變化時的行為
      – 模組與模組之間的緊耦合使得軟體面對變化時,相關的模組都要隨之更改
      – 模組與模組之間的松耦合使得軟體面對變化時,一些模組更容易被替換或者更改,但其他模組保持不變

動機(Motivation)
      在軟體系統中,經常面臨著“某個對象”的建立工作;由於需求的變化,這個對象經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面。
      如何應對這種變化?如何提供一種“封裝機制”來隔離出“這個易變對象”的變化,從而保持系統中

意圖(Intent)
定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory Method使得一個類的執行個體化延遲到子類。——《設計模式》GoF

結構(Structure)

Factory Method模式的幾個要點

  1. Factory Method模式主要用於隔離類對象的使用者和具體類型之間的耦合關係。面對一個經常變化的具體類型,緊耦合關係會導致軟體的脆弱。
  2. Factory Method模式通過物件導向的手法,將所要建立的具體對象工作延遲到子類,從而實現一種擴充(而非更改)的策略,較好地解決了這種緊耦合關係。
  3. Factory Method模式解決“單個對象”的需求變化,Abstract Factory 模式解決“系列對象”的需求變化,Builder模式解決“對象部分”的需求變化。

代碼:

代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testWpf
{
    public abstract class AbtractCar
    {
        public abstract void Startup();
        public abstract void Run();
        public abstract void Turn(Direction dretion);
        public abstract void Stop();
    }

    public abstract class CarFactory
    {
        public AbtractCar CreateCar()
        {
            return new HongQiCar();
        }
    }

    public class HongQiCar : AbtractCar
    {
        public override void Startup() { }
        public override void Run() { }
        public override void Turn(Direction dretion) { }
        public override void Stop() { }
    }

    public class HongqiCarFactory : CarFactory
    {
        public override AbtractCar CreateCar()
        {
            return new HongQiCar();
        }
    }

    public class CarTestFramework
    {

        public void BuidTestContext(CarFactory carFactory)
        {
            AbtractCar c1 = carFactory.CreateCar();
        }

        public void DoTest(AbtractCar car)
        {
            car.Run();
        }
        
        public Car GetTestData(AbtractCar car)
        {
            return car;
        }
    }

    public class App
    { 
        public static void Main()
        {
            CarTestFramework carTestFramework = new CarTestFramework();
            //carTestFramework.BuidTestContext(new DongFengCarFactory());

            //讓子類決定執行個體化哪一個類
            carTestFramework.BuidTestContext(new HongqiCarFactory());
            
        }
    }

}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.