zoukankan      html  css  js  c++  java
  • 合成聚合复用原则(设计模式_23)

    面向对象思想编程中的继承体系中,关于继承,子类继承父类,父类一旦改变会影响到子类,这其实是不灵活的表现,而且继承的越频繁越不好维护,子类与父类有依赖关系存在,而(合成聚合复用原则)的出现,很好的 去改善了继承中这种不灵活性

    合成聚合复用原则:的定义就是为了改善继承体现中的,依赖性,不灵活性;

    关于合成聚合复用原则:
    聚合指的是弱包含关系:例如(人属于人群的一部分,而人不包含了人群)
    合成指的是强包含关系:例如(人的手臂属于这个人的一部分,而这个人也包含了这个人的手臂)

    以下举例实现:


    package com.oop.demo2.person;
    
    import com.oop.demo2.Thing;
    
    /**
     * 抽象出一个人类抽象类
     * @author Liudeli
     *
     */
    public abstract class Person {
    
        /**
         * 抽象出一个人的拿东西成为
         */
        public abstract void take(Thing thing);
    
    }
    
    package com.oop.demo2;
    
    /**
     * 抽象出事物抽象类(包含了世界上一起事物)
     * @author Liudeli
     *
     */
    public abstract class Thing {
    
        /**
         * 返回事物名称即可
         * @return
         */
        public abstract String showName();
    
    }
    
    package com.oop.demo2.person;
    
    import com.oop.demo2.Thing;
    
    /**
     * 定义具体男人对象
     * @author Liudeli
     *
     */
    public class ManPerson extends Person{
    
        public void take(Thing thing) {
            System.out.println("男人拿着:" + thing.showName());
        }
    
    }
    
    package com.oop.demo2.person;
    
    import com.oop.demo2.Thing;
    
    /**
     * 定义一个女人对象
     * @author Liudeli
     *
     */
    public class WomanPerson extends Person{
    
        public void take(Thing thing) {
            System.out.println("女人拿着:" + thing.showName());
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 定义天堂雨伞具体对象
     * @author Liudeli
     *
     */
    public class TiantangUmbrella extends Thing{
    
        public String showName() {
            return "天堂雨伞";
        }
    }
    
    package com.oop.demo2;
    
    /**
     * 小米手机具体对象
     * @author Liudeli
     *
     */
    public class MIPhone extends Thing{
    
        public String showName() {
            return "小米手机";
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 定义LV钱包具体对象
     * @author Liudeli
     *
     */
    public class LVWallet extends Thing{
    
        public String showName() {
            return "钱包";
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 定义苹果耳机具体对象
     * @author Liudeli
     *
     */
    public class AppleHeadphones extends Thing {
    
        public String showName() {
            return "苹果耳机";
        }
    
    }
    
    /**
     * 测试程序(合成聚合复用原则)
     * @author Liudeli
     *
     */
    public class Main {
    
        public static void main(String[] args) {
    
            Person man = new ManPerson();
            Person woman = new WomanPerson();
    
            man.take(new MIPhone());
            man.take(new LVWallet());
    
            woman.take(new AppleHeadphones());
            woman.take(new TiantangUmbrella());
    
        }
    
    }
    

    运行结果:
    这里写图片描述


    Project结构图:
    这里写图片描述


    这里写图片描述


    谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
    刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 相关阅读:
    IBatis学习总结之动态拼sql
    IBatis学习总结
    帝都残暴的.net 之旅 (Martin Fowler 有留言哦)
    简洁实用的WordPress模板
    发现一位同行特牛
    app爬虫--mitmproxy用法梳理
    [转]数据库设计中的14个技巧
    [转] sql数据类型 varchar与nvarchar的区别
    web工作原理
    Xcode6 LaunchImage尺寸
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322192.html
Copyright © 2011-2022 走看看