18-桥接器模式

18-桥接器模式

概念

桥接模式(Bridge), 将抽象部分与它的实现部分分离,使它们都可以独立的变化,实现指的是抽象类和它的派生类用来实现自己的对象。
实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。

实现

package com.gof.bridge;

/**
 * 手机软件
 *
 * @since 2023-02-25
 */
public interface PhoneSoftware {
    void run();
}
package com.gof.bridge;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
public class Game implements PhoneSoftware {
    @Override
    public void run() {
        System.out.println("运行游戏");
    }
}
package com.gof.bridge;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
public class AddressBook implements PhoneSoftware {
    @Override
    public void run() {
        System.out.println("运行通讯录");
    }
}
package com.gof.bridge;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public abstract class PhoneBrand {
    protected PhoneSoftware software;

    public abstract void run();
}
package com.gof.bridge;

import lombok.Data;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
@Data
public class BrandM extends PhoneBrand {

    @Override
    public void run() {
        System.out.println("M品牌");
        software.run();
    }
}
package com.gof.bridge;

import lombok.Data;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
@Data
public class BrandN extends PhoneBrand {
    @Override
    public void run() {
        System.out.println("N品牌");
        software.run();
    }
}
package com.gof.bridge;

/**
 * 功能描述
 *
 * @since 2023-02-25
 */
public class Client {
    public static void main(String[] args) {
        BrandM m = new BrandM();
        m.setSoftware(new AddressBook());
        m.run();

        m.setSoftware(new Game());
        m.run();

        BrandN n = new BrandN();
        n.setSoftware(new AddressBook());
        n.run();

        n.setSoftware(new Game());
        n.run();
    }
}
posted @ 2023-02-25 10:44  Oh,mydream!  阅读(15)  评论(0编辑  收藏  举报