`
rq2_79
  • 浏览: 240531 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个面向接口编程的好例子

阅读更多

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求: 1.要有联动性,老鼠和主人的行为是被动的。

          2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。

         2. 对老鼠和主人进行抽象
评分标准:

<1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

 

 

 public interface Observer
    {
        void Response();    //观察者的响应,如是老鼠见到猫的反映
    }
    public interface Subject
    {
        void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {         
            this.name = name;
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    { 
        public Master(Subject subj)
        {         
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine("Host waken!");
        } 
    }
 
    public class Cat : Subject
    {
        private ArrayList observers;
        public Cat()
        { 
            this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
        {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
            {
                obs.Response();
            }
        }
    }
    class MainClass
    {     
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    } 
 
 public delegate void SubEventHandler();
    public abstract class Subject
    {
        public event SubEventHandler SubEvent;
        protected void FireAway()
        {
            if (this.SubEvent != null)
                this.SubEvent();
        } 
    }
    public class Cat : Subject
    { 
        public void Cry()
        {
            Console.WriteLine("cat cryed.");
            this.FireAway();
        }
    }
    public abstract class Observer
    {
        public Observer(Subject sub)
        {
            sub.SubEvent += new SubEventHandler(Response);
        }
        public abstract void Response();   
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject sub) : base(sub)
        { 
            this.name = name;
        }
        public override void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {
        public Master(Subject sub) : base(sub){}
        public override void Response()
        {
            Console.WriteLine("host waken");
        }
    }
    class Class1
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }
 
分享到:
评论
1 楼 rq2_79 2008-11-12  
http://hi.baidu.com/1netboy/blog/item/954eab00c338a317738b6556.html

相关推荐

    面向接口编程详解

    通过这些模式,我们可以更好地应用面向接口编程,提高代码的可复用性和可扩展性。 总结,面向接口编程是软件设计中的关键原则,它促进了组件之间的松耦合,提高了系统的可维护性和可测试性。理解并熟练运用面向接口...

    面向接口编程理解demo

    面向接口编程是软件设计中的一个重要概念,尤其是在Java和Android开发中。它是一种编程范式,强调程序应通过其公开的接口与其消费者进行交互,而不是直接依赖于其实现细节。这样的设计提高了代码的可扩展性、可维护...

    面向接口编程小例子练习程序

    面向接口编程是一种重要的软件设计原则,它强调程序应依赖...通过学习和实践这些例子,你可以更好地理解面向接口编程的精髓,提升自己的编程技能。在实际项目中应用这些原则,可以使代码结构更加清晰,易于理解和扩展。

    工厂模式与面向接口编程例子

    在这个例子中,我们将深入探讨工厂模式的应用及其与面向接口编程的关系。 首先,工厂模式有三种主要的形式:简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式中,有一个中心工厂类负责创建所有实例;工厂...

    欧柏泰克:.NET简谈面向接口编程

    在文章中,作者使用了一个建筑工程师的例子来解释面向接口编程的思想。建筑工程师首先需要进行整体项目的构思,结果就是一份很完美的建筑图纸。这个图纸就是一个大的接口,规定了建筑工程师需要遵守的硬性条件。然后...

    IoC容器用户注册的例子面向接口编程

    面向接口编程是Spring推崇的设计原则之一,它强调将实现细节隐藏在接口背后,从而降低了模块间的耦合。通过定义接口,客户端代码只需要与接口交互,而不直接依赖具体实现。这样,当需要更换实现时,只需修改配置,而...

    ASP的一个面向接口的反射例子

    在这个“面向接口的反射例子”中,我们将深入探讨ASP.NET中的两个关键概念:面向接口编程和反射。 首先,面向接口编程(Interface-Oriented Programming, IOP)是面向对象编程的一种策略,它强调设计和实现时以接口...

    面向对象编程例子1

    在这个“面向对象编程例子1”中,我们可以推测作者可能创建了一些类,比如一个基类(可能是抽象类或接口),然后定义了几个继承自该基类的子类。每个子类可能具有自己的特性和行为,展示了多态性的概念。同时,通过...

    Java面向接口编程之简单工厂模式示例

    Java面向接口编程之简单工厂模式示例 本文档主要介绍了Java面向接口编程之简单工厂模式的概念和实现,以及如何使用简单工厂模式来实现不同的打印机功能。下面是对标题、描述、标签和部分内容的分析和知识点总结: ...

    Mybatis面向接口编程1

    Mybatis 是一款流行的持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而实现更灵活的数据访问。在 Mybatis 中,面向接口编程是一种重要...通过面向接口编程,Mybatis 成为了一个强大且灵活的持久层解决方案。

    针对接口编程 java示例

    在Java编程中,接口(Interface)是一种非常重要的概念,它为多态性提供了基础,促进了模块间的解耦,使得代码更加灵活和易于扩展。...这种实践对于提升编程技能,尤其是理解面向接口编程的重要性,是非常有价值的。

    面向接口的编程

    面向接口编程的核心思想是,我们在编写代码时,关注的是对象能够做什么(即接口),而不是它具体是如何做的(即实现)。这样,我们可以将实现细节与接口分离,使得系统更容易进行模块化设计。当需要改变或添加功能时...

    一个理解面向对象很好的例子

    在这个例子中,"门禁系统"可能被用作一个实际场景,帮助我们深入理解面向对象的核心概念。 首先,门禁系统可以被视为一个类(Class),这个类包含了多个对象(Objects)。在现实世界中,每个门禁点都是一个独立的...

    【每日一步】面向接口编程选择java接口还是抽象类.doc

    ### 面向接口编程与Java接口、抽象类的选择 #### 一、接口与抽象类的概念 在面向对象编程中,接口(Interface)与抽象类(Abstract Class)都是用来实现多态性的工具,它们允许开发者定义行为规范而不指定具体实现...

    matlab面向对象编程.pdf

    本文通过MATLAB语言实现了一个典型的面向对象技术应用,使用的例子涉及MATLAB 7.6版本(属于2008a版本的一部分)的功能。 面向对象编程允许我们设计可以描述各种实体的类别,这些实体包括物理对象(如汽车或有机体...

    c++面向对象编程实例大全

    《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...

    springboot通过面向接口编程对控制反转IOC的理解.docx

    面向接口编程则是另一种核心原则,它提倡设计时定义抽象接口,而具体的实现则由依赖的类提供。这两者在Spring Boot中的结合,使得应用程序更加灵活和可扩展。 控制反转在Spring框架中主要通过依赖注入(Dependency ...

    Java面向对象程序设计 例子源代码

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的理念,强调将现实世界的问题抽象为类和对象,从而更高效、更直观地进行软件开发。这个压缩包包含了一系列的Java源代码示例,由...

    php简单面向对象的网站例子

    面向对象编程(Object-Oriented Programming,简称OOP)是PHP中的一个重要概念,它使得代码更加结构化、可维护和可扩展。在这个“php简单面向对象的网站例子”中,我们将探讨如何在PHP中实现面向对象的基本原理,...

Global site tag (gtag.js) - Google Analytics