本文出自 http://blog.csdn.net/shuangde800
之前已经学过“针对接口编程,而不是针对实现编程”,但是,当使用“new”时,却的确是在实例化一个具体类,所以用的是具体实现,而不是接口。
Duck duck = new MallardDuck( );
上面就是常用的实例化的new 方法。
用"new"有什么不好呢?
在技术上,new 没错,都是“改变”的错。
针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。因为如果是针对接口而写,那么通过多态,它可以与任何新类实现该接口。
但是,使用大量的具体类时,也是自找麻烦,因为一旦加入新的具体类,就必须改变代码。也就是说,你的代码并非“对修改关闭”。相用新的类必须重新打开它。
认识简单工厂模式
假设要开一个比萨店,要获取很多不同类型的比萨,那么我们可以写这样一个方法来获取比萨对象:
Pizza orderPizza(String type){ Pizza pizza; if(type.equals("chees")){ pizza = new CheesePizza(); }else if(type.equals("greek")){ pizza = new GreekPizza(); }else if(type.equals("pepperoni")){ pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }
当比萨类型改变,或删除时,上面的代码就要改变,不符合设计原则。
所以我们把创建对象移到orderPizza()之外,由这个对象专职创建比萨。
SimplePizzaFactory只做一件事情:帮它的客户创建比萨。
public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(); } else if (type.equals("veggie")) { pizza = new VeggiePizza(); } return pizza; } }
上面对象就是工厂(factory),工厂处理创建对象的细节。
下面重做比萨店:
PizzaStore类,使用SimplePizzaFactory对象来创建比萨
public class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); //注意,把new变成了工厂的创建方法!不再使用具体实例化! pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
定义简单工厂模式
简单工厂其实不是一个设计模式,反而是一种编程习惯,但是却经常使用。
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
相关推荐
学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记...
前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...
设计模式学习笔记(一)--简单工厂模式源码和类图
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
Java设计模式学习笔记
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
各个模式都有详细的例子C#学习笔记,打开就知道了
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
VC学习笔记1:按钮的使能与禁止 VC学习笔记2:控件的隐藏与显示 VC学习笔记3:改变控件的大小和位置 VC学习笔记4:什么时候设定视中控件的初始尺寸? ......
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
设计模式学习笔记.ppt 自己写的一点学习笔记。
设计模式学习笔记,总共23个设计模式,还有几个设计原则
Head First 设计模式学习笔记。更多内容请参见文章内容。
23种设计模式学习笔记及源码,全部原创 欢迎提出意见和建议
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
资源名称:设计模式C 学习笔记资源目录:【】设计模式C 学习笔记源代码【】设计模式C 学习笔记目录【】设计模式C 学习笔记(1)【】设计模式C 学习笔记(2)【】设计模式C 学习笔记(3)【】设计模式C 学习笔记(4)...
共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...
设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx设计模式学习笔记--Flyweight享元模式.docx
学习设计模式入门的好材料 简单明了,一看就懂 帮助你快速学习或是复习23种设计模式
代理模式学习笔记、单例模式学习笔记、命令模式、原型模式、模式特点总结。 为个人对设计模式的理解,如果有理解不一致的不要砸砖啊