`
huakewoniu
  • 浏览: 47654 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

设计模式之刘邦关系系统---面线对象核心思想面向接口编程吗,单一原则,合成聚合原则的完美演绎

阅读更多

我们下面帮刘邦实现其管理系统。我们将用这个例子讲解面向对象编程的核心:

A 面向接口编程。

B合成复用原则。

好处:

为何“要尽量使用合成和聚合,尽量不要使用继承”呢?这是因为:第一,继承复用破坏包装,它把超类的实现细节直接暴露给了子类,这违背了信息隐藏的原则;第二:如果超类发生了改变,那么子类也要发生相应的改变,这就直接导致了类与类之间的高耦合,不利于类的扩展、复用、维护等,也带来了系统僵硬和脆弱的设计。而是用合成和聚合的时候新对象和已有对象的交互往往是通过接口或者抽象类进行的,就可以很好的避免上面的不足,而且这也可以让每一个新的类专注于实现自己的任务,符合单一职责原则。

 

下面是实现:

 

package com.diermeng.designPattern.CARP;

/*

 * 大臣的接口

 */

public interface Minister {

    /*

     * 大臣能够执行的动作

     */

    public void duty();

}

 

 

 士兵的接口

package com.diermeng.designPattern.CARP;

/*

 * 士兵的接口

 */

public interface Soldier {

    /*

     * 士兵能够执行的动作

     */

    public void duty();

}

 

 

韩信对大臣接口的实现

package com.diermeng.designPattern.CARP.impl;

 

import com.diermeng.designPattern.CARP.Minister;

import com.diermeng.designPattern.CARP.Soldier;

/*

 * 韩信对大臣接口的实现

 */

public class Hanxin implements Minister {

    //对士兵的聚合关系

    Soldier[] soldiers;

 

    /*

     * 无参构造方法

     */

    public Hanxin() {}

    /*

     * 有士兵参数的构造方法

     */

    public Hanxin(Soldier[] soldiers) {

        super();

        this.soldiers = soldiers;

    }

 

    /*

     * 获取士兵的集合

     */

    public Soldier[] getSoldiers() {

        return soldiers;

    }

 

    /*

     * 设置士兵的集合

     */

    public void setSoldiers(Soldier[] soldiers) {

        this.soldiers = soldiers;

    }

    /*

     * 韩信的职能

     * @see com.diermeng.designPattern.CARP.Minister#duty()

     */

    public void duty() {

        System.out.println("我是刘邦的大臣,永远忠实于刘邦");

 

    }

 

}

 

 

士兵A对士兵接口的实现

package com.diermeng.designPattern.CARP.impl;

 

import com.diermeng.designPattern.CARP.Soldier;

/*

 * 士兵A

 */

public class SoldierA implements Soldier {

    /*

     * 士兵A的职责

     * @see com.diermeng.designPattern.CARP.Soldier#duty()

     */

    public void duty() {

        System.out.println("我是韩信的士兵A");

 

    }

 

}

 
 

       士兵B对士兵接口的实现

package com.diermeng.designPattern.CARP.impl;

 

import com.diermeng.designPattern.CARP.Soldier;

/*

 * 士兵B

 */

public class SoldierB implements Soldier {

    /*

     * 士兵B的职责

     * @see com.diermeng.designPattern.CARP.Soldier#duty()

     */

    public void duty() {

        System.out.println("我是韩信的士兵B");

 

    }

 

}

 

 

 

       刘邦类

package com.diermeng.designPattern.CARP.impl;

 

import com.diermeng.designPattern.CARP.Minister;

 

/*

 * 刘邦类

 */

public class Liubang {

    //拥有大臣

    Minister[] minister;

 

    /*

     * 无参构造方法

     */

    public Liubang() {}

    /*

     * 把大臣的数组作为参数传入构造方法

     */

    public Liubang(Minister[] minister) {

        super();

        this.minister = minister;

    }

 

    /*

     * 获取大臣的集合

     */

    public Minister[] getMinister() {

        return minister;

    }

 

    /*

     * 设置大臣的集合

     */

    public void setMinister(Minister[] minister) {

        this.minister = minister;

    }

 

    /*

     * 刘邦的职能

     */

    public void duty()

    {

        System.out.println("我是皇帝,普天之下,莫非王土;四海之内,莫非王臣");

    }

}
 
建立一个测试类,代码如下:

package com.diermeng.designPattern.CARP.client;

 

import com.diermeng.designPattern.CARP.Minister;

import com.diermeng.designPattern.CARP.Soldier;

import com.diermeng.designPattern.CARP.impl.Hanxin;

import com.diermeng.designPattern.CARP.impl.Liubang;

import com.diermeng.designPattern.CARP.impl.SoldierA;

import com.diermeng.designPattern.CARP.impl.SoldierB;

 

/*

 * 测试类的客户端

 */

public class CARPClient {

    public static void main(String[] args)

    {

        //声明并实例化士兵A

        Soldier soldierA = new SoldierA();

        //声明并实例化士兵B

        Soldier soldierB = new SoldierB();

        //构造士兵数组

        Soldier[] soldiers = {soldierA,soldierB};

 

        //声明并实例化韩信,同时传入士兵数组

        Minister hanxin = new Hanxin(soldiers);

 

        //构造大臣数组

        Minister[] minister = {hanxin};

        //声明并实例化刘邦,同时传入大臣数组

        Liubang liubang = new Liubang(minister);

 

        liubang.duty();

 

        //循环输出大臣

        for(Minister aminister:liubang.getMinister()){

            aminister.duty();

        }

 

    }

}

 
 

 

程序运行结果如下:

我是皇帝,普天之下,莫非王土;四海之内,莫非王臣

我是刘邦的大臣,永远忠实于刘邦

 
 

   

点评: 其实这个刘邦类也可以以接口的形式出现,如果这样的话,整个系统就可以是帝王管理系统,这样的话,这个帝王就可以曹操,也可以是刘备。非常完美的面向接口编程的实践。 同时这个系统很好的使用了

合成聚合的原则。各个模块如大臣,士兵模块都可以各司其责,同样实现了单一职能原则。

分享到:
评论

相关推荐

    面向切面编程

    面向切面编程的核心思想是在运行时,动态地将代码切入到类的指定方法或位置上,以此来处理那些在多个业务逻辑中重复出现的功能。 #### AOP与OOP的关系 面向对象编程(Object-Oriented Programming,简称OOP)通过...

    戏说面向对象程序设计(C#版).pdf

    - **设计模式原则**:包括单一职责原则、开闭原则、里氏替换原则等,用于指导设计模式的选择和使用。 #### 五、分层架构的重要性 **分层架构**: - **三层架构**:分为表现层、业务逻辑层和数据访问层,每一层都...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    JAVA面向对象编程(孙卫琴)1.pdf

    《JAVA面向对象编程》是IT领域内一部权威的教材,由资深软件工程师孙卫琴编著,本书系统地介绍了JAVA语言的面向对象编程思想与技术。面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将程序...

    面向对象技术思想

    此外,面向对象思想还与其他编程范式,如函数式编程和面向切面编程相结合,形成混合编程风格,以应对更多样化的开发需求。 总结来说,面向对象技术思想是软件开发中的重要理论基础,它通过封装、继承、多态等机制,...

    JAVA面向对象编程(孙卫琴)08.pdf

    Java语言是支持面向对象编程的典型代表之一,它的核心概念包括类、对象、继承、多态和封装。 2. 孙卫琴老师及其书籍:孙卫琴是编写Java相关教材的作者,她出版的书籍以易懂的叙述方式帮助读者理解和掌握Java编程...

    设计模式6大原则.zip

    在面向对象设计中,有六条核心原则,它们是所有设计模式的基础,可以帮助开发者创建灵活、可维护和可扩展的代码。这六条原则统称为SOLID原则,即单一职责原则(Single Responsibility Principle, SRP)、开闭原则...

    java中的面向接口编程.docx

    在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了,而各个对象之间的协作关系那么成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,...

    面向对象分析与设计1

    国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...

    设计模式解析_面向对象设计新思路(第2版)

    《设计模式解析_面向对象设计新思路(第2版)》是一本深入探讨软件工程领域中面向对象设计的著作,其核心内容在于介绍和解析设计模式,为开发者提供了一种全新的面向对象设计视角。设计模式是经过时间和实践检验的解决...

    设计模式英文版-Design Pattern Explained

    这种封装性是面向对象编程的一个核心原则,它为设计模式的应用提供了坚实的基础。 #### 二、设计模式的重要性 设计模式是一系列解决特定问题的解决方案,它们经过实践验证并被广泛接受。了解和掌握设计模式能够...

    软件设计师中级王勇老师课程笔记-9面向对象

    1. **封装**:封装是面向对象的核心之一,指的是将数据和操作数据的方法捆绑在一起,隐藏对象的内部状态和细节,只提供外部可访问的方法接口。 2. **继承**:继承是面向对象的另一个重要特性,允许创建新类来继承已...

    二十三种设计模式【PDF版】

    设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归 类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时...

    基础夯实套装--设计模式算法.pdf

    根据提供的文件信息,我们可以推断出这份文档主要涉及计算机科学和软件工程中的设计模式和算法知识。这部分内容适合于初学者和有一定经验的在职人员学习和巩固。接下来,我将详细解释文档中提到的概念和知识点。 ##...

    设计模式迷你手册.chm

    7. 面向接口编程和面向切面编程在设计模式中的应用 8. 混合模式和模式的组合使用 通过这个迷你手册,初学者可以系统地了解和学习设计模式,而开发者可以作为参考手册,在遇到特定问题时快速查找解决方案。无论你是...

    Java 中的设计模式 - jdon

    《Java中的设计模式 - jdon》是一本深入探讨Java编程中设计模式的电子书,它主要聚焦于如何在实际开发中应用和理解这些经典的设计原则和模式。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见...

    新版设计模式手册 - C#设计模式(第二版)

    《新版设计模式手册 - C#设计模式(第二版)》是一部深入探讨C#编程中设计模式的权威指南,尤其适合已经有一定C#基础并希望提升软件设计能力的开发者阅读。设计模式是解决软件开发中常见问题的经验总结,是软件工程的...

    23种Java设计模式和15种J2EE设计模式.pdf

    2. **拦截器模式**:允许在调用目标对象之前和之后执行某些代码,类似于AOP(面向切面编程)。 3. **业务代表模式**:为EJB(Enterprise JavaBeans)客户端提供一个简单的接口,隐藏了底层的复杂性。 4. **数据...

Global site tag (gtag.js) - Google Analytics