1. 程式人生 > >設計模式學習之二

設計模式學習之二

工廠模式的父類可以是介面也可以是抽象類

簡單工廠

回顧一下簡單工廠步驟
1.先建立一個抽象工廠類
2.在抽象工廠類裡面寫一個抽象方法
3.建立一個普通類
4.在普通類中重寫抽象方法

之前的設計模式學習之一

寫簡單工廠/抽象類的小技巧
在這裡插入圖片描述
建立了普通類之後會提示報錯
在這裡插入圖片描述
滑鼠放上去之後會有提示
左邊的燈泡點開
在這裡插入圖片描述
點選實現抽象類,VS會幫我們快速的建立下面的程式碼
在這裡插入圖片描述
直接幫我們"敲"好下面的程式碼
我們直接編輯就可以了
在這裡插入圖片描述

快捷鍵2 switch 快速補齊引數
例子:
在這裡插入圖片描述

public enum PhoneType
{
Iphone, XiaoMi
}
/// <summary>
/// 外部通過列舉傳過來手機的型別 /// </summary> /// <return>返回值是返回一部手機的物件 public class MobliePhoneFactory { public static MobliePhone CreateMobliePhone(PhoneType type)//靜態方法是用類呼叫的 { MobliePhone mobliePhone = null; return mobliePhone; //switch (type) //{ // case PhoneType.Iphone:
// break; // case PhoneType.XiaoMi: // break; // default: // break; //} switch (type) { case PhoneType.Iphone: break; case PhoneType.XiaoMi: break; default
: break; } }

首先輸入sw然後 按下 tab鍵
在這裡插入圖片描述
會自動碼出來switch的格式
在這裡插入圖片描述
將上面的switch on改成我們之前列舉的type
在這裡插入圖片描述
那麼列舉的有幾個型別就會出現幾個
在這裡插入圖片描述
簡單工廠的完整程式碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SimpleFactoryTest : MonoBehaviour
{
    private void Start()
    {
        MobliePhone mobliePhone = MobliePhoneFactory.CreateMobliePhone(PhoneType.Iphone);
        mobliePhone.Print();
    }


}

public abstract class MobliePhone     //定義一個抽象類
{
    public abstract void Print();       //抽象類的抽象方法

}

public class Iphone : MobliePhone
{
    public override void Print()
    {
      Debug.Log( "蘋果手機"  );
    }
}
public class XiaoMi : MobliePhone
{
    public override void Print()
    {
        Debug.Log("小米手機");
    }
}


public enum PhoneType
{
Iphone, XiaoMi
}
/// <summary>
/// 外部通過列舉傳過來手機的型別
/// </summary>
/// <return>返回值是返回一部手機的物件 
public class MobliePhoneFactory
{
    public static MobliePhone CreateMobliePhone(PhoneType type)//靜態方法是用類呼叫的  非靜態的方法是用物件呼叫的
    {
        MobliePhone mobliePhone = null;
     
        switch (type)
        {
            case PhoneType.Iphone:
                mobliePhone = new Iphone();
                break;
            case PhoneType.XiaoMi:
                mobliePhone = new XiaoMi();
                break;
            
        }
        return mobliePhone;

    }
}

工廠方法

各個工廠是分開的
1.首先建立 抽象類(抽象工廠和抽象手機螢幕和手機主機板)
2.建立普通螢幕類------蘋果螢幕繼承自抽象螢幕,小米螢幕繼承自抽象螢幕
3.建立普通主機板類------蘋果主機板繼承自抽象主機板,小米主機板繼承自抽象主機板
4.建立普通蘋果工廠類------蘋果的螢幕和主機板都寫在這裡<重寫!!>
5.建立普通小米工廠類------小米的螢幕和主機板都寫在這裡<重寫!!>

下面是程式碼解析

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AbstractFactoryTest : MonoBehaviour {

	// Use this for initialization
	void Start () {

        AbstractFactory xiaomiFactory= new XiaomiFactory();
        MotherBoard motherBoard = xiaomiFactory.CreateMotherBoard();
        motherBoard.Print();
        Screen screen = xiaomiFactory.CreateScreen();
        screen.Print();
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}
/// <summary>
/// 抽象工廠類
/// </summary>
public abstract class AbstractFactory //建立抽象工廠類
{
    public abstract Screen CreateScreen();       //裡面寫了兩個抽象方法一個是螢幕一個是主機板
    public abstract MotherBoard CreateMotherBoard();
}
/// <summary>
/// 抽象螢幕類
/// </summary>
public abstract class Screen     
{
    public abstract void Print();
}
/// <summary>
/// 抽象主機板類
/// </summary>
public abstract class MotherBoard
{
    public abstract void Print();
}

public class AppleScreen : Screen  //蘋果手機的螢幕繼承自抽象螢幕類
{
    public override void Print()    //繼承之後要重寫
    {
        Debug.Log("蘋果手機螢幕");
    }
}
public class XiaoMiScreen : Screen//小米手機的螢幕繼承自抽象螢幕類
{
    public override void Print()//繼承之後要重寫
    {
        Debug.Log("小米螢幕");
    }
}
public class AppleMotherBoard : MotherBoard    //蘋果主機板類同理
{
    public override void Print()
    {
        Debug.Log("蘋果主機板");
    }
}
public class XiaoMiMotherBoard : MotherBoard  //小米主機板同理
{
    public override void Print()
    {
        Debug.Log("小米主機板");
    }
}
public class AppleFactory : AbstractFactory    //然後是建立普通蘋果工廠,繼承自抽象工廠類
{
    public override MotherBoard CreateMotherBoard()   //重寫主機板的方法
    {
        return new AppleMotherBoard();    //返回值為蘋果主機板
    }

    public override Screen CreateScreen()        //重寫螢幕的方法
    {
        return new AppleScreen();
    }
}
public class XiaomiFactory : AbstractFactory       //小米工廠和蘋果工廠同理
{
    public override MotherBoard CreateMotherBoard()
    {
        return new XiaoMiMotherBoard();
    }

    public override Screen CreateScreen()
    {
        return new XiaoMiScreen();
    }
}