22.桥接模式

来源:互联网 发布:比易企秀好用的软件 编辑:程序博客网 时间:2024/06/04 22:39
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();}}


原创粉丝点击