GOF23的一些总结(八)
2016-12-30 16:57
274 查看
桥接模式出现要解决的问题:
这是一个扩展起来很麻烦的类?下面是使用单继承,多重继承实现多维度功能的
-扩展性问题(类个数膨胀问题):
如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类。
如果要新增加一个品牌:也要增加各种电脑类型的类。
-违反单一职责原则:
一个类,有两个原因,引起这个类的变化。
桥接模式适用场景
下面是类图
电脑接口和类的代码
品牌接口和类关系的代码
测试类
这是一个扩展起来很麻烦的类?下面是使用单继承,多重继承实现多维度功能的
-扩展性问题(类个数膨胀问题):
如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类。
如果要新增加一个品牌:也要增加各种电脑类型的类。
-违反单一职责原则:
一个类,有两个原因,引起这个类的变化。
桥接模式适用场景
下面是类图
电脑接口和类的代码
package com.dasenlin.cn; /** * 电脑类,调用品牌具有的功能 * @author Administrator * */ public class Computer { protected Brand brand; public Computer(Brand brand) { super(); this.brand = brand; } public void sale(){ brand.sale(); } } class Desktop extends Computer{ public Desktop(Brand brand) { super(brand); } @Override public void sale() { super.sale(); System.out.println("销售台式机"); } } class Laptop extends Computer{ public Laptop(Brand brand) { super(brand); } @Override public void sale() { super.sale(); System.out.println("销售笔记本"); } }
品牌接口和类关系的代码
package com.dasenlin.cn; /** * 品牌维度的接口 * @author Administrator * */ public interface Brand { void sale(); } class Lenovo implements Brand{ @Override public void sale() { System.out.println("销售联想电脑"); } } class Dell implements Brand{ @Override public void sale() { System.out.println("销售戴尔电脑"); } }
测试类
package com.dasenlin.cn; /** * 测试运行 * @author Administrator * */ public class Client { public static void main(String[] args) { Computer comp = new Laptop(new Lenovo()); comp.sale(); Computer com = new Desktop(new Dell()); com.sale(); } }
相关文章推荐
- GOF23的一些总结(三)
- GOF23的一些总结(六)
- GOF23的一些总结(一)
- GOF23的一些总结(七)
- GOF23的一些总结(十五)
- GOF23的一些总结(十四)
- GOF23的一些总结(二十一)
- GOF23的一些总结(四)
- GOF23的一些总结(十二)
- GOF23的一些总结(十八)
- GOF23的一些总结(十一)
- GOF23的一些总结(二十)
- GOF23的一些总结(二)
- GOF23的一些总结(九)
- GOF23的一些总结(十六)
- 总结一些经验(5)
- ASP.net中动态加载控件时一些问题的总结
- 关于ASP.NET在IIS一些问题的经验总结(zz)
- 一些sas程序的总结
- 关于PHP操作文件的一些FAQ总结