六.观察者模式

其它模式:
   
         一.Strategy Pattern(策略模式)
         二.Template Method Pattern(模版方法模式)
         三.Bridge Pattern(橋接模式)
         四.Visitor Pattern(觀察者模式)
         五.Action Pattern(命令模式)   

         六.(Observer Pattern)观察者模式   

 

设计模式,还没写完,今天有些空,接着写。

   今天看看观察模式。最近在帮公司做个考试系统。我们知道,考试有单选,多选,填空等等。。。分别视为一个对象的话,那对这个对象,就会有很多操作?

 

Code
    public abstract class QuestionBase
    {
        
public abstract string Update();
    }

    
public class SingleSelect : QuestionBase
    {
        
public override string Update()
        {
            
return "singleselect";
        }
    }
    
public class MultiSelect : QuestionBase
    {
        
public override string Update()
        {
            
return "multiselect";
        }
    }
    
public class Blank : QuestionBase
    {
        
public override string Update()
        {
            
return "blank";
        }
    }

 

我们可以把它视为被观察者,即为被观察的对象。这里,我只列举了Update操作。

然后,我们观察者,既发出操作的对象。

 

Code
public abstract class OperateBase
    {
        
public List<QuestionBase> list = new List<QuestionBase>();
        
public void Add(QuestionBase qb)
        {
            list.Add(qb);
        }
        
public void Remove(QuestionBase qb)
        {
            list.Remove(qb);
        }
        
public string BatUpdate()
        {
            
string result = "";
            
foreach (QuestionBase qb in list)
                result 
+= qb.Update() + "***";
            
return result;
        }
    }

    
public class UpdateOperator : OperateBase
    {
    }

 

我们也用抽象类来隔离。这样。观察者(Question)和被观察者(Operator)之间分离,降低耦合。

现在的情景是,当我提交答案胡时候,

 

UpdateOperator update  =   new  UpdateOperator();
            update.Add(
new  SingleSelect());
            update.Add(
new  MultiSelect());
            update.Add(
new  Blank());

可以方便把观察者(Question)和被观察者 Operator  组合起来,实现我们更新答案的功能!

   

你可能感兴趣的:(六.观察者模式)