该实例基于WPF实现,直接上代码,下面为三层架构的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class ChinesePerson : Person
{
public ChinesePerson(string name, string sex, int age) : base(name, sex, age)
{
}
public override string work()
{
string msg = $"开始工作,姓名:{Name},性别:{Sex},年龄:{Age}";
return msg;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class ChinesePersonFactory : CreatorFactory
{
public override Person createPerson()
{
return new ChinesePerson("中国人", "男", 22);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
//抽象工厂类
public abstract class CreatorFactory
{
//工厂方法
public abstract Person createPerson();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class JapanPerson : Person
{
public JapanPerson(string name, string sex, int age) : base(name, sex, age)
{
}
public override string work()
{
string msg = $"开始工作,姓名:{Name},性别:{Sex},年龄:{Age}";
return msg;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class JapanPersonFactory : CreatorFactory
{
public override Person createPerson()
{
return new JapanPerson("日本人", "女", 30);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
public abstract class Person
{
protected Person(string name, string sex, int age)
{
Name = name;
Sex = sex;
Age = age;
}
public string Name { get; set; }
public string Sex { set; get; }
public int Age { get; set; }
//工作
public abstract string work();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class USAPerson : Person
{
public USAPerson(string name, string sex, int age) : base(name, sex, age)
{
}
public override string work()
{
string msg = $"开始工作,姓名:{Name},性别:{Sex},年龄:{Age}";
return msg;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式练习.Model.工厂方法模式
{
internal class USAPersonFactory : CreatorFactory
{
public override Person createPerson()
{
return new USAPerson("美国人", "女", 33);
}
}
}
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 FactoryMethod_ViewModel : ObservableObject
{
[ObservableProperty]
private string chinese;
[ObservableProperty]
private string japan;
[ObservableProperty]
private string uSA;
[RelayCommand]
private void ps()
{
Person ch = new ChinesePersonFactory().createPerson();
Person jp = new JapanPersonFactory().createPerson();
Person us = new USAPersonFactory().createPerson();
string[] persons = { ch.work(), jp.work(), us.work() };
Chinese = persons[new Random().Next(0, 3)];
Japan = persons[new Random().Next(0, 3)];
USA = persons[new Random().Next(0, 3)];
}
}
}