如何控制/坐标算法
Posted
技术标签:
【中文标题】如何控制/坐标算法【英文标题】:How can be controled / coordinated algorithm 【发布时间】:2017-01-02 22:04:17 【问题描述】:下图是复杂算法的简单部分。 我尝试按照算法准备一些类。
abstract class Person
public string HasXRecords get; set;
public int PersonAnotherFeature get; set;
public List<X> Xs get; set; = new List<X>();
abstract class X
//There will more than 1000 type subX classes
interface IAdder
void AddXToList();
interface IRemover
void RemoveXFromList();
class XAdderFactory
private Person _person;
public bool PersonHasNoRecords
get
return string.IsNullOrEmpty(_person.HasXRecords);
public XAdderFactory(Person person)
this._person = person;
if (PersonHasNoRecords)
new XListMakerAFactory(person);
else
new XListMakerB(person);
class XListMakerB: IAdder
private Person _person;
public XListMakerB(Person person)
this._person = person;
AddXToList();
new PersonXListEvaluator(person);
public void AddXToList()
//Dynamic instance of X will be added in to person Xlist.
class XListMakerAFactory
public XListMakerAFactory(Person person)
switch (person.PersonAnotherFeature)
case 1:new XListMakerA1(person);
break;
//there will be XListMakerA2,XListMakerA3 etc.
new XRemoverFactory(person);
class XListMakerA1: IAdder
private Person _person;
public XListMakerA1(Person person)
this._person = person;
AddXToList();
new PersonXListEvaluator(person);
public void AddXToList()
//_person.Xs.Add(new X1());
// According to business logic,X2,X3 etc. will be added manually.
class XRemoverFactory
public XRemoverFactory(Person person)
new XRemoverFromList1(person);
new XRemoverFromList2(person);
class XRemoverFromList1 : IRemover
private Person _person;
public XRemoverFromList1(Person person)
this._person = person;
RemoveXFromList();
public void RemoveXFromList()
//According some business logic some Xs will be removed.
class XRemoverFromList2 : IRemover
private Person _person;
public XRemoverFromList2(Person person)
this._person = person;
RemoveXFromList();
public void RemoveXFromList()
//According some business logic some Xs will be removed.
class PersonXListEvaluator
public PersonXListEvaluator(Person person)
//According to business rules evaluation will be cordinated.
我主要关心的是管理很多类以成功算法。我尝试设计该级别的工厂方法将决定哪个类(在同一级别)必须在该级别实例化在下一级工厂方法实例化之后。流程在关卡工厂方法的构造函数中进行管理。您认为这是可管理、可维护的吗?您提供更好的解决方案吗?
【问题讨论】:
这看起来像是一个codereview.stackexchange.com 问题。 我找到了这个链接msdn.microsoft.com/en-us/library/ff650706.aspx 【参考方案1】:创作模式:
你需要Abstract_factory,它根据你的要求返回两种类型的工厂-type_list_a和type_list_b。
行为模式:
如果您正在寻找在运行时动态交换算法,您应该使用Strategy_pattern 和上下文。
上下文知道并返回特定算法,因此客户端不知道所有实现算法的 100 或 1000 个类。
Real World Example of the Strategy Pattern 提供了很好的例子。
结构模式:
如果您想在不暴露所有子系统的情况下向客户端隐藏复杂性,请使用Facade 模式。
查看sourcemaking 教程,了解有关每种模式用例的更多详细信息。
【讨论】:
感谢您的回答。 再次感谢。我查看了 Facade,我认为 Facade 就是我要找的那个.. 小心***上关于抽象工厂的文章。它包含正确和错误信息的混合。特别是第一个类图以及 C# 和 Java 示例是不正确的。更好的资源是:sourcemaking、oodesign 和 spring guru。***不是学习设计模式的好资源,因为它是由非技术作家编辑的。以上是关于如何控制/坐标算法的主要内容,如果未能解决你的问题,请参考以下文章