Object-Oriented Programming Java)
• Object-Oriented Programming (Java)
Design pattern Factory工厂模式 Decorator装饰者模式 Observer观察者模式
Design Pattern 1 Factory 工厂模式 2 Decorator 装饰者模式 3 Observer 观察者模式
NeW的危害 当看到“New”时,就会想到“具体”: 是的,当使用“New”时,你的确是在实例化一个具体类,所以用的确实是实 现,而不是接口。这是一个问题,你已经知道了代码绑着具体类会导致代码更脆弱, 更缺乏弹性。 Duck duck-new Mallardducko: 要使用接口,让代 但是还是得建立具 码更有弹性 体类的实例 当有一群相关的具体类时,通常会写出这样的代码: Duckduck if(picnic)i 线你同登变化和扩展, duck =new Mallardduck 0: 锰狱利說褽被重新打开进行 3 else if(hunting) t duck =new Decoy DuckO 修改。使系统维护变得困难。 3 else if(in Bathtub) 向对象一个重要原则:对扩 duck =new RubberDuckO 展开放,对修改封闭
New的危害 当看到“New”时,就会想到“具体”: 是的,当使用“New”时,你的确是在实例化一个具体类,所以用的确实是实 现,而不是接口。这是一个问题,你已经知道了代码绑着具体类会导致代码更脆弱, 更缺乏弹性。 Duck duck=new MallardDuck(); 要使用接口,让代 码更有弹性 但是还是得建立具 体类的实例 当有一群相关的具体类时,通常会写出这样的代码: Duck duck; if(picnic) { duck =new MallardDuck(); } else if(hunting) { duck =new DecoyDuck(); } else if(inBathTub) { duck =new RubberDuck(); } 有一大堆不同的鸭子类, 必须要等到运行时,才 知道例化哪一个 也就是说,一旦有变化和扩展, 这段代码就要被重新打开进行 修改。使系统维护变得困难。 面向对象一个重要原则:对扩 展开放,对修改封闭
Let s start from an example 假如你有一个比萨店,身为对象村内最先进的萨店的主人,你 的代码可能这么写: Pizza OrderPizza( i Pizza pizza =new Pizza pizza. prepared 为了让系统更有弹性,我们很 希望这是一个抽象类或接口。 pizza. bakeo 但如果这样,这些类或接口就 pizza. cuto 无法真接实例化。 pizza. boxo return pizza
Let’s start from an example 假如你有一个比萨店,身为对象村内最先进的萨店的主人,你 的代码可能这么写: 为了让系统更有弹性,我们很 希望这是一个抽象类或接口。 但如果这样,这些类或接口就 无法真接实例化。 Pizza OrderPizza() { Pizza pizza =new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }
事情往往很复杂 但是你需要更多的比萨类型 所以必须要增加一些代码,来“决定”适合的比萨类型,然后再“制造”这个比萨: Pizza orderPizza( String type Pizza pizza 现在把比萨类型号传入 orderPizza(0。 if (type equals("cheese"))I pizza =new CheesePizzao 3 else if (type equals(greek") 根据比萨的类型,我们实例化正确的 pizza =new GreekPizzao 具体类,然后将其赋值为 pizza实例变 y else if 量。请注意,这里的任何比萨都必须 (type equals(pepperoni)t 实现pza接口。 pizza=new Pepperonipizzao pizza. prepared pizza. bakeo 日我们有了一个比萨,需要 pizza. cutO 做一些准务(就是擀揉面皮、 pizza. boXO 加上佐料,例如芝士),然后 return pIzza 烧烤、切片、装盒!
事情往往很复杂 但是你需要更多的比萨类型: 所以必须要增加一些代码,来“决定”适合的比萨类型,然后再“制造”这个比萨: Pizza orderPizza( ) { Pizza pizza; pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; 现在把比萨类型号传入orderPizza()。 根据比萨的类型,我们实例化正确的 具体类,然后将其赋值为pizza实例变 量。请注意,这里的任何比萨都必须 实现pizza接口。 一旦我们有了一个比萨,需要 做一些准务(就是擀揉面皮、 加上佐料,例如芝士),然后 烧烤、切片、装盒! String type if (type.equals("cheese")) { pizza =new CheesePizza(); } else if (type.equals("greek")) { pizza =new GreekPizza(); } else if (type.equals("pepperoni")) { pizza=new PepperoniPizza(); }