抽象工厂模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。

一 Model

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    public abstract class AbstructFactory
    {
        public abstract Comptuter GetComptuter(string name);
        public abstract Phone GetPhone(string name);
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class AppleComptuter : Comptuter
    {
        public override string Name()
        {
            return "苹果电脑";
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class ApplePhone : Phone
    {
        public override string Name()
        {
            return "苹果手机";
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    public abstract class Comptuter
    {
        public abstract string Name();
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class ComptuterFactory : AbstructFactory
    {
        public override Comptuter GetComptuter(string name)
        {
            Comptuter comptuter = null;
            switch (name)
            {
                case "Apple":
                    comptuter = new AppleComptuter();
                    break;
                case "Dell":
                    comptuter = new DellComptuter();
                    break;
                case "Lesson":
                    comptuter = new LessonComptuter();
                    break;
            }

            return comptuter;
        }

        public override Phone GetPhone(string name)
        {
            Phone phone = null;
            switch (name)
            {
                case "Apple":
                    phone = new ApplePhone();
                    break;
                case "ReMi":
                    phone = new ReMiPhone();
                    break;
                case "HauWei":
                    phone = new HauWeiPhone();
                    break;
            }

            return phone;
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class DellComptuter : Comptuter
    {
        public override string Name()
        {
            return "戴尔电脑";
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class HauWeiPhone : Phone
    {
        public override string Name()
        {
            return "华为手机";
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class LessonComptuter : Comptuter
    {
        public override string Name()
        {
            return "联想电脑";
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    public abstract class Phone
    {
        public abstract string Name();
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class PhoneFactory : AbstructFactory
    {
        public override Comptuter GetComptuter(string name)
        {
            Comptuter comptuter = null;
            switch (name)
            {
                case "Apple":
                    comptuter = new AppleComptuter();
                    break;
                case "Dell":
                    comptuter = new DellComptuter();
                    break;
                case "Lesson":
                    comptuter = new LessonComptuter();
                    break;
            }

            return comptuter;
        }

        public override Phone GetPhone(string name)
        {
            Phone phone = null;
            switch (name)
            {
                case "Apple":
                    phone = new ApplePhone();
                    break;
                case "ReMi":
                    phone = new ReMiPhone();
                    break;
                case "HauWei":
                    phone = new HauWeiPhone();
                    break;
            }

            return phone;
        }
    }
}
cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.抽象工厂模式
{
    internal class ReMiPhone : Phone
    {
        public override string Name()
        {
            return "小米手机";
        }
    }
}

二 View

XML 复制代码
<Window x:Class="设计模式练习.View.抽象工厂模式.AbstructFactory"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:设计模式练习.View.抽象工厂模式"
        mc:Ignorable="d"
        Title="AbstructFactory" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="8*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>

        <StackPanel Grid.Column="0">
            <TextBlock Text="{Binding Ph1}"/>
            <TextBlock Text="{Binding Ph2}"/>
            <TextBlock Text="{Binding Ph3}"/>
            <TextBlock Text="{Binding Cp1}"/>
            <TextBlock Text="{Binding Cp2}"/>
            <TextBlock Text="{Binding Cp3}"/>
        </StackPanel>

        <Button Content="生产随机对象" Grid.Column="1" Command="{Binding fctCommand}"/>
    </Grid>
</Window>

三 ViewModel

cs 复制代码
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.抽象工厂模式;

namespace 设计模式练习.ViewModel.抽象工厂模式
{
    partial class AbstructFactory_ViewModel : ObservableObject
    {
        [ObservableProperty]
        private string ph1;

        [ObservableProperty]
        private string ph2;

        [ObservableProperty]
        private string ph3;

        [ObservableProperty]
        private string cp1;

        [ObservableProperty]
        private string cp2;

        [ObservableProperty]
        private string cp3;

        [RelayCommand]
        private void fct()
        {
            AbstructFactory a = new ComptuterFactory();
            AbstructFactory b = new PhoneFactory();

            Cp1 = a.GetComptuter("Dell").Name();
            Cp2 = a.GetComptuter("Apple").Name();
            Cp3 = a.GetComptuter("Lesson").Name();

            Ph1 = b.GetPhone("Apple").Name();
            Ph2 = b.GetPhone("ReMi").Name();
            Ph3 = b.GetPhone("HauWei").Name();
        }
    }
}
相关推荐
SadSunset7 天前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
Trouvaille ~7 天前
【Java篇】以简驭繁:接口的精简与程序的优雅
java·开发语言·接口·抽象工厂模式·类和对象·javase·基础入门
ZouZou老师10 天前
C++设计模式之抽象工厂模式:以家具生产为例
c++·设计模式·抽象工厂模式
Q1808095114 天前
基于MATLAB/SIMULINK的异步电动机矢量控制系统探秘
抽象工厂模式
海中有金16 天前
设计模式[2]——抽象工厂模式一分钟说清
设计模式·抽象工厂模式
__万波__21 天前
二十三种设计模式(三)--抽象工厂模式
java·设计模式·抽象工厂模式
phdsky23 天前
【设计模式】抽象工厂模式
c++·设计模式·抽象工厂模式
MM_MS1 个月前
C#小案例-->汽车租聘系统计价功能
c#·汽车·简单工厂模式·抽象工厂模式·visual studio
ZHE|张恒1 个月前
设计模式(三)抽象工厂模式 — 一次性创建一整套相关对象的终极工厂
设计模式·抽象工厂模式
梵豪1 个月前
抽象工厂模式在智慧蔬菜大棚物联网系统中的应用
物联网·抽象工厂模式