java编程思想复用,多态,以及设计模式-复用篇
来源:互联网 发布:cs反恐精英1.6数据修改 编辑:程序博客网 时间:2024/06/13 18:32
最近,在看java编程思想,觉得这的确是一本难得的好书。目前已经看到了第12章异常,个人觉得本书的最精华部分是讲述了,类的复用,多态以及几种常见的设计模式(这些其实就是面向的对象的编程思想),所以我就把这些看完了的,加上自己的理解,总结出来给大家分享一下。
Java的复用
大概有三种,继承,组合,以及他们的折衷代理。
先说组合,组合我们最常用了:
下面给出一个简单的代码示例:
class WaterSource { private String s; WaterSource() { System.out.println("WaterSource()"); s = "Constructed"; } public String toString() { return s; }}public class SprinklerSystem { private String valve1, valve2; private WaterSource source = new WaterSource(); private int i; private float f; public String toString() { return "valve1 = " + valve1 + " " + "valve2 = " + valve2 + "\n" + "i = " + i + " " + "f = " + f + " " + "source = " + source; } public static void main(String[] args) { SprinklerSystem sprinklers = new SprinklerSystem(); System.out.println(sprinklers); }} /* Output:WaterSource()valve1 = null valve2 = nulli = 0 f = 0.0 source = Constructed
组合,我就不多讲了,下面来说继承
照样给出继承的示例:
import static net.mindview.util.Print.*;class Cleanser { private String s = "Cleanser"; public void append(String a) { s += a; } public void dilute() { append(" dilute()"); } public void apply() { append(" apply()"); } public void scrub() { append(" scrub()"); } public String toString() { return s; } public static void main(String[] args) { Cleanser x = new Cleanser(); x.dilute(); x.apply(); x.scrub(); print(x); }}public class Detergent extends Cleanser { // Change a method: public void scrub() { append(" Detergent.scrub()"); super.scrub(); // Call base-class version } // Add methods to the interface: public void foam() { append(" foam()"); } // Test the new class: public static void main(String[] args) { Detergent x = new Detergent(); x.dilute(); x.apply(); x.scrub(); x.foam(); print(x); print("Testing base class:"); Cleanser.main(args); }} /* Output:Cleanser dilute() apply() Detergent.scrub() scrub() foam()Testing base class:Cleanser dilute() apply() scrub()
继承我也不多讲了
下面来说说代理
代理可说是继承和组合的中庸之道,因为有时想要把把另一个类放在这个类中而且对外提供接口,而运用继承的话,要知道有时候这个类跟另一类不是is-a的关系,而是has-a的关系,所以代理就正好是我们需要的了,只暴露想要暴露的接口。
下面给出代码示例:PS:SpaceShipControls 是被代理的类。
public class SpaceShipDelegation { private String name; private SpaceShipControls controls = new SpaceShipControls(); public SpaceShipDelegation(String name) { this.name = name; } // Delegated methods: public void back(int velocity) { controls.back(velocity); } public void down(int velocity) { controls.down(velocity); } public void forward(int velocity) { controls.forward(velocity); } public void left(int velocity) { controls.left(velocity); } public void right(int velocity) { controls.right(velocity); } public void turboBoost() { controls.turboBoost(); } public void up(int velocity) { controls.up(velocity); } public static void main(String[] args) { SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector"); protector.forward(100); }}
注意,有时我们也把组合和继承一起使用,总之这三种方式要灵活使用。
向上转型:
复用父类的接口并不是继承技术最重要的方面,最重要的是向上转型,这个下一篇将讲述。
最后总结一下:什么时候用继承,什么时候用组合。
组合是将现有的类型作为新类型的底层实现的一部分使用,而继承复用的是接口,还有多态。
在设计系统时,优先选择组合,只有确实需要复用父类接口或向上转型时,才需要使用。
- java编程思想复用,多态,以及设计模式-复用篇
- java编程思想复用,多态,以及设计模式-多态
- java编程思想中的设计模式
- java设计模式思想
- 《Java编程思想》泛型中的策略设计模式
- Labview 编程思想 框架模式设计
- 编程思想--编程的设计原则与设计模式
- Java编程思想--多态
- JAVA编程思想--多态
- 用设计模式的思想来定制Java中的事件
- java语言讲解singleton的编程思想---深入浅出单实例Singleton设计模式
- java设计模式之面向对象思想
- java编程思想与算法设计
- 《Java编程思想》中的装饰模式
- 《Java编程思想》中的工厂模式
- 《Java编程思想》中的代理模式
- Java编程思想之命令模式
- 《JAVA编程思想》读书笔记-代码复用
- boost多线程
- strange c use for macro very good(c语言)
- Vim 插件管理工具 pathogen
- strange c define for macro and array(c语言)
- Debug Tricks
- java编程思想复用,多态,以及设计模式-复用篇
- 6.4.10:group by子句
- 八皇后 & 迷宫 算法
- NET Framework 版本和依赖关系
- hdu 4573 Throw the Stones
- 多变的dialog进度条
- 笔记本屏幕
- oracle数据库、客户端安装以及ps/sql连接和导入表实例
- Pig实战