zoukankan      html  css  js  c++  java
  • 对象结构型

    介绍

    通俗点理解就是将一个类拆分得更细,并使用聚合来代替继承来关系它们的关系
    
    举个栗子:
    建设人是一个抽象
    
    [桥接模式之前]
    1. 可以分男人和女人
    2. 可以细分为穿T恤的男人、穿马甲的女人或是穿穿马甲的男人、穿T恤的女人等
    
    [桥接模式之后]
    1. 可以分男人和女人
    2. 可以将T恤和马甲另外归为一类实现,如先归为衣服
    3. 将衣服聚合到人(男人/女人)当中
    

    定义

    将抽象部分与它的实现部分分离,使它们都可以独立地变化
    

    唠叨

    长篇大论的文章让人看不下去,故弄玄虚的我不想看,个人喜欢简约简洁的文章
    从学习编程至今也看过不少技术文章,感想是很多写技术文章的人不知道是故意还是无意,总是喜欢把一个简单的东西说得貌似很复杂
    对此非常厌恶,觉得如果真是有心分享的话,应该是用最简练最通俗的话语来去讲解对技术的理解和使用,而不是炫耀式地表达
    当然这完全是我自己个人观点
    

    入门案例:

    UML图解:

    代码:

    Person:

    public abstract class Person {
    
        private Clothing clothing; //分离的分类
        private String personType;
    
        //衣着
        public void dress() {
            Clothing clothing = getClothing();
            if(clothing != null){
                clothing.personDressCloth(this);
            }
        }
    
        //setter和getter
        public Clothing getClothing() {
            return clothing;
        }
    
        public void setClothing(Clothing clothing) {
            this.clothing = clothing;
        }
    
        public String getPersonType() {
            return personType;
        }
    
        public void setPersonType(String personType) {
            this.personType = personType;
        }
    }
    

    Man:

    public class Man extends Person {
        public Man() {
            setPersonType("男人");
        }
    }
    

    Lady:

    public class Lady extends Person {
        public Lady() {
            setPersonType("女人");
        }
    }
    

    Clothing:

    public interface Clothing {
        void personDressCloth(Person person);
    }
    

    T:

    public class T implements Clothing {
        @Override
        public void personDressCloth(Person person) {
            System.out.println(person.getPersonType() + "穿T恤");
        }
    }
    

    Jacket:

    public class Jacket implements Clothing {
        @Override
        public void personDressCloth(Person person) {
            System.out.println(person.getPersonType() + "穿马甲");
        }
    }
    

    测试:

    public class Main {
        public static void main(String[] args){
    
    /*
            Person man = new Man();
            Person lady = new Lady();
    
            Clothing jacket = new Jacket();
            jacket.personDressCloth( man );
    
            Clothing t = new T();
            t.personDressCloth( lady );
    */
            //或以下写法==================================================
    
            Person man = new Man();
            man.setClothing( new T() );
            man.dress();
    
            Person lady = new Lady();
            lady.setClothing( new Jacket() );
            lady.dress();
    
            /**
             * output:
             *  男人穿T恤
                女人穿马甲
             */
        }
    }
    

    参考 疯狂java联盟

    推荐文章

    java设计模式-桥梁模式(桥接模式 Bridge) https://www.jianshu.com/p/775cb53a4da2

  • 相关阅读:
    关于正则表达式的递归匹配问题
    给程序添加启动画面
    C#中的ICollection接口
    C#基本线程同步
    C# 图片裁剪代码
    .NET程序性能的基本要领
    C# 6与VB 12即将加入模式匹配
    Python实例---利用正则实现计算器[FTL版]
    Python实例---利用正则实现计算器[参考版]
    Python学习---重点模块之subprocess
  • 原文地址:https://www.cnblogs.com/tandi19960505/p/8285743.html
Copyright © 2011-2022 走看看