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();
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号