(一)简单工厂模式
2014-08-25 10:26
162 查看
(一)简单工厂模式
作者:林子时间:2014年8月
出处:http://blog.csdn.net/u013011841
声明:欢迎指出错误
1、为什么学习设计模式?
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。2、为什么第一个学习简单工厂?
简单工厂(Simple Factory)是类的创建者,又叫静态工厂方法(Static Factory Method)。简单工厂是由一个工厂对象决定创建出纳一种产品类的实例。第一个学习简单工厂是因为这是最基本的创建模式,学习好简单工厂有利于我们学好工厂方法。3、简单工厂的引进
我们以农场公司为例子,专门向市场销售各类水果。在这个系统里面需要描述下列水果葡萄Grape
草莓Strawberry
苹果Apple
水果和其他的植物有很大的不同,水果最终是可以食用的。那么一个自然的做法就是就是建立一个各种水果都适用的接口,以便和农场里的其他植物区分开来。
水果的接口(interface)规定所有的水果必须实现的接口,包括任何水果必须具备的方法。
PS: 不知道什么是接口的去看Java教材,接口就是Fruit的抽象方法,类似C++的虚函数
水果接口的源代码:
Public interface Fruit { //生长 void grow(); //收获 void harvest(); //种植 void plant(); }
描述苹果类的类图如下
Apple类是水果类的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生的植物,因此多出一个treeAge性质,用来描述苹果树的年龄。
public class Apple implements Fruit { private int treeAge; //生长 public void grow() { log(“Apple if growing...”); } //收获 public void harvest() { log(“Apple has been harvest.”) } //种植 public void plant() { log(“Apple has been planted.”) } //辅助方法 public static log(String msg) { System.out.println(msg); } //树龄取值方法 public int getTreeAge() { return treeAge; } //树龄的赋值方法 public int setTreeAge(int treeAge) { this.treeAge=treeAge; } }
葡萄和草莓类和苹果类类似,这里就不一一给出了。
农场的园丁(在这里作为简单工厂)也是系统的一部分,自然要由一个合适的类来代表。这个类就是FruitGardener类,其结构如图所示
FruitGardener会根据客户端的要求,创建出不同的水果对象,如苹果(Apple).
园丁类的代码如下
public class FruitGardener { //简单工厂 public static Fruit factory(String which) { if(which.equalsIgnoreCase(“Apple”)) { return new Apple; } if(which.equalsIgnoreCase(“strawberry”)) { return new strawberry; } if(which.equalsIgnoreCase(“grape”)) { return new grape; } } }
4、简单工厂的结构
简单工厂涉及到工厂角色、抽象产品角色和具体产品角色等三个角色:
工厂类(Creator):担任这个角色的是简单工厂的核心,含有与应用紧密相关的逻辑,工厂类在调用下创建产品对象。
抽象产品(Product):担任这个角色的类是由简单工厂所创建的对象的父类,或者他们拥有共同的接口。
具体产品(Concrete Product):简单工厂所创建的任何对象都是这个角色的实例。
工厂类源代码
public class Creator { //简单工厂 public static Product factory() { return new ConcreteProduct(); } }
抽象产品源代码
public interface Product { }
具体产品
public class ConcreteProduct implements Product { public ConcreteProduct(){} }
相关文章推荐
- 设计模式之-简单工厂、工厂方法、抽象工厂
- Dot Net 设计模式—简单工厂
- 简单工厂设计模式-设计模式(1)
- 单态模式(Singleton)简单工厂(Simple Factory)
- JAVA设计模式——简单工厂(Simple Factory)模式
- 简单工厂创立性模式介绍
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 阎宏:Java语言简单工厂创立性模式介绍
- 简单的工厂模式
- 小菜编程成长记(五 体会简单工厂模式的美妙)
- (4)简单工厂模式 — Simple Factory — 文物管理衙门 — 和申的经营之道第一部分
- C#设计模式之简单工厂篇
- 爪哇语言简单工厂创立性模式介绍
- 简单工厂设计模式-设计模式(1)
- 简单工厂模式(Simple Factory Pattern)
- 爪哇语言简单工厂创立性模式介绍
- zt:工厂模式-简单工厂(设计模式的入门级模式—初级)
- C#设计模式学习笔记---简单工厂模式
- 解析Petshop 3.0 简单工厂(Simple Factory)模式
- 简单工厂(Simple Factory)模式