首页 > 其他分享 >观察者模式

观察者模式

时间:2024-04-01 15:14:36浏览次数:24  
标签:Console Name void 观察者 模式 Action new public

定义

public interface IAnimal
{
    public string _Name { get; set; }
    void Action();
}

public class Cat : IAnimal
{
    public string _Name { get; set; }

    public Cat(string Name)
    {
        _Name = Name;
    }
    public void Action()
    {
        Console.WriteLine($"小猫{_Name}开始跑");
    }
}

public class Dog : IAnimal
{
    public string _Name { get; set; }

    public Dog(string Name) {
        _Name = Name;
    }

    public void Action()
    {
        Console.WriteLine($"小狗{_Name}开始叫");
    }
}

public delegate void DelegateAction();

public class OwnerDelegate
{
    public void Action()
    {
        Console.WriteLine("主人回来了");
    }
    public OwnerDelegate()
    {
        delegateAction = new DelegateAction(Action);
    }
    public DelegateAction delegateAction;
    public void AddAction(DelegateAction action)
    {
        delegateAction += action;
    }
    public void RemoveAction(DelegateAction action)
    {
        if (delegateAction != null)
        {
            delegateAction -= action;
        }
    }
    public void Update()
    {
        delegateAction.Invoke();
    }
}

public class Owner
{ 
    public List<IAnimal> animals = new List<IAnimal>();
    public void Addanimal(IAnimal animal)
    {
        animals.Add(animal);
    }
    public void Removeanimal(IAnimal animal)
    {
        animals.Remove(animal);
    }
    public void Aciton()
    {
        Console.WriteLine("主人回家了");
        foreach (var item in animals)
        {
            item.Action();
        }
    }
}

调用

Console.WriteLine("观察者模式");
Cat cat = new Cat("Jim");
Dog dog = new Dog("Tom");
Owner owner = new Owner();
owner.Addanimal(cat);
owner.Addanimal(dog);
owner.Aciton();
Console.WriteLine("观察者模式,委托实现");
Cat cat1 = new Cat("Jim");
Dog dog1 = new Dog("Tom");
OwnerDelegate ownerDelegate = new OwnerDelegate();
ownerDelegate.AddAction(cat1.Action);
ownerDelegate.AddAction(dog1.Action);
ownerDelegate.Update();

 

标签:Console,Name,void,观察者,模式,Action,new,public
From: https://www.cnblogs.com/daiwk/p/18108443

相关文章

  • 责任链模式
    定义publicinterfaceIHandler{publicIHandlernext{get;set;}voidResponse();}publicclassHandlerOne:IHandler{publicIHandlernext{get;set;}publicvoidResponse(){Console.WriteLine("正在处理程序1......
  • 策略模式
    定义publicinterfaceITraffic{voidDrive();}publicclassCar:ITraffic{publicvoidDrive(){Console.WriteLine("车在陆地行驶");}}publicclassShip:ITraffic{publicvoidDrive()......
  • 简单工厂模式
    定义publicinterfaceICar{publicvoidDrive();}publicclassXiaoMiCar:ICar{publicvoidDrive(){Console.WriteLine("正在驾驶小米汽车");}}publicclassTeslaCar:ICar{publicvoidDrive(){Console.Wr......
  • 设计模式之组合模式
    概念:将对象组合成树形结构以表示“部分——整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式有三个角色:抽象构件:定义公有属性和方法。叶子结点:树形结构的底层结点,没有子结点,实现抽象构件的所有操作。中间结点:叶子结点之前的结点,有子结点。组合模......
  • 打破传统消费模式,让每一次购物成为可持续的循环
    亲爱的朋友们,我是微三云的周丽,一名专注于私域电商模式创、新的探索者。私域运营的核心不应仅仅局限于不断的cu销,这样的ce略只会使xiao费者对品牌逐渐失去感觉。更高明的做法是利用场景ce略来深化与用户的联系,直击他们的ton点,使xiao费者自发产生购买yu望,从而提升转化率。循环......
  • C#中的设计模式
    设计模式在C#和WPF日常开发中扮演着重要角色,它们提供了一套通用的解决方案,用于解决软件设计中的常见问题。以下是关于设计模式的知识点,以及可能会在面试中被问到的一些问题和答案:设计模式的知识点:创建型模式:创建型模式用于处理对象的创建过程,包括单例模式、工厂模式、抽......
  • js 实现简单发布订阅模式
    1.事件调度器classEventEmitter{constructor(){this.events={};}on(event,listener){if(!this.events[event]){this.events[event]=[];}this.events[event].push(listener);}emit(event,...args){if(this.eve......
  • 【前端面试3+1】01闭包、跨域、路由模式
    一、对闭包的理解定义:闭包是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。特点:闭包可以访问外部函数的变量,即使外部函数已经执行完毕。闭包可以保持外部函数的作用域不被销毁,从而延长变......
  • 设计模式,装修模式,Php代码演示,优缺点,注意事项
    装饰模式(DecoratorPattern)是一种结构型设计模式,它允许动态地向一个现有对象添加新的功能或行为,而不改变其原始结构。在PHP中,可以使用类的继承和组合来实现装饰模式。下面是一个简单的PHP装饰模式示例代码:首先,定义一个基类`Component`,它代表要装饰的对象:```phpabstract......
  • 什么时候使用静态方法,面向对象编程,设计模式,php编程
    静态方法在编程中有多种适用情况,以下是一些常见的使用场景:1.**工具类或辅助函数**:当你需要创建一个类来提供一些与类本身的实例无关的工具方法或辅助函数时,静态方法是很合适的。这些方法可以直接通过类名来调用,而无需创建类的实例。2.**计算或常量**:如果有一些计算或常量与......