設計模式學習之二
阿新 • • 發佈:2018-12-01
工廠模式的父類可以是介面也可以是抽象類
簡單工廠
回顧一下簡單工廠步驟
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();
}
}