package bridgeMode; /* * 实现手机+游戏 */ public class Commonly { public static void main(String[] args) { xiaomiGame game = new xiaomiGame(); game.Run(); //如果要增加一种手机类型 看Commonly2 } } /* * 小米手机+游戏 */ class xiaomiGame{ public void Run(){ System.out.println("运行小米手机游戏"); } }
package bridgeMode; /* * 实现手机+游戏 */ public class Commonly2 { public static void main(String[] args) { Game game = new xiaomiGame2(); Game game2 = new huaweiGame2(); game.Run();game2.Run(); //这里用了抽象 吧Game抽象成父类 抽象思想值得提倡 //如果要加手机其他功能呢? 比如照相 放歌 打电话? 看Commonly3 } } abstract class Game{ public abstract void Run(); } /* * 小米手机+游戏 */ class xiaomiGame2 extends Game{ public void Run(){ System.out.println("运行小米手机游戏"); } } /* * 华为 */ class huaweiGame2 extends Game{ public void Run(){ System.out.println("运行华为手机游戏"); } }
package bridgeMode; /* * 实现手机+游戏 * Commonly2 是对游戏进行了抽象 但是如果需要在手机某个品牌上加功能 就需要给手机品牌进行抽象。。。 */ public class Commonly3 { public static void main(String[] args) { Brand brand ; brand = new xiaomiGame3(); brand.Run(); brand = new huaweiGame3(); brand.Run(); brand = new xiaomiMusic3(); brand.Run(); brand = new huaweiMusic3(); brand.Run(); //如果现在再加一个vivo手机 也具备相同的功能 那肯怎么办呢? 添加3个类 //读者可以 用手机软件进行分类 把最终的Brand父类 改为Soft 以软件来进行分类 然后不同的手机软件继承软件父类 这样也是解决不了问题的 如果添加新的手机 或软件 也是需要添加好多类的 //怎么办 看BridgeMode.java } } /* * 手机品牌抽象 */ class Brand{ public void Run(){ } } /* * 小米手机 */ class xiaomi extends Brand{ } /* * 华为手机 */ class huawei extends Brand{ } //小米游戏 class xiaomiGame3 extends xiaomi{ public void Run(){ System.out.println("小米 游戏"); } } //华为游戏 class huaweiGame3 extends xiaomi{ public void Run(){ System.out.println("华为 游戏"); } } //小米音乐 class xiaomiMusic3 extends xiaomi{ public void Run(){ System.out.println("小米 音乐"); } } //小米音乐 class huaweiMusic3 extends xiaomi{ public void Run(){ System.out.println("华为 音乐"); } }
package bridgeMode; /* * 桥接模式: * 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 * 它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。 * * */ public class BridgeMode { public static void main(String[] args) { Soft soft = new Game6(); Soft soft2 = new Music6(); xiaomi6 xiaomi6 = new xiaomi6(); huawei6 huawei6 = new huawei6(); xiaomi6.setSoft(soft); xiaomi6.Run(); huawei6.setSoft(soft); huawei6.Run(); xiaomi6.setSoft(soft2); xiaomi6.Run(); huawei6.setSoft(soft2); huawei6.Run(); } } /* * 对象的继承关系是在编译时就定义好了,所以无法再运行是改变从父类继承的实现,,,, 子类的实现与父类有非常紧密的联系 * 以至于父类实现中的任何变化必然会导致子类发生变化 当你需要复用子类时 如果继承下来的实现不能解决新的问题 * 则父类必须重写 或被其他更适合的类替换 这种依赖关系限制了了灵活性 并最终限制了复用性 */ /* *合成/聚合复用原则 :尽量使用合成/聚合 尽量不要使用类继承 * *聚合表示一种弱的拥有关系 比如说你属于你现在所在的公司A包含B 但是B不是A对象的一部分 * :比如 鱼缸中每条鱼都属于这个鱼缸 但是鱼缸中包含好多小鱼 *合成则是一种强的拥有关系,体现了严重的部分与整体的关系: * :比如 鱼的尾巴属于鱼 鱼只有一个尾巴 * */ /* * 手机软件 */ abstract class Soft{ public abstract void Run(); } //游戏 音乐 等软件 // 游戏 class Game6 extends Soft{ public void Run() { System.out.println("游戏"); } } //音乐 class Music6 extends Soft{ public void Run() { System.out.println("音乐"); } } /* * 品牌抽象 */ abstract class Brand6{ protected Soft soft; public void setSoft(Soft soft){ this.soft = soft; } public abstract void Run(); } //小米 class xiaomi6 extends Brand6{ public void Run() { System.out.print("小米手机:"); soft.Run(); } } //小米 class huawei6 extends Brand6{ public void Run() { System.out.print("华为手机:"); soft.Run(); } }