抽象工厂模式-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();
        }
    }
}
相关推荐
Geoking.4 天前
【设计模式】抽象工厂模式(Abstract Factory)详解:一次创建“一整套产品”
设计模式·抽象工厂模式
西幻凌云6 天前
认识设计模式——工厂模式
c++·设计模式·简单工厂模式·抽象工厂模式·工厂模式
阿拉斯攀登9 天前
设计模式:工厂模式概要
java·设计模式·抽象工厂模式
阿闽ooo15 天前
抽象工厂模式实战:用C++打造家具生产系统(附UML图与完整代码)
c++·设计模式·抽象工厂模式·uml
明洞日记15 天前
【设计模式手册022】抽象工厂模式 - 创建产品家族
java·设计模式·抽象工厂模式
虫小宝16 天前
返利软件架构设计:多平台适配的抽象工厂模式实践
java·开发语言·抽象工厂模式
JavaBoy_XJ19 天前
创建型-抽象工厂模式
抽象工厂模式
SadSunset1 个月前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
Trouvaille ~1 个月前
【Java篇】以简驭繁:接口的精简与程序的优雅
java·开发语言·接口·抽象工厂模式·类和对象·javase·基础入门
ZouZou老师1 个月前
C++设计模式之抽象工厂模式:以家具生产为例
c++·设计模式·抽象工厂模式