首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式之Factory深入研究

2012-10-07 
设计模式之Factory深入研究设计模式之Factory深入研究 今天我去市场,要决定是买水果等产品,还是选择种水果

设计模式之Factory深入研究

设计模式之Factory深入研究
今天我去市场,要决定是买水果等产品,还是选择种水果的产品。具体怎么操作自己选择。来到市场,我发现主要有一些水果:苹果(Apple),葡萄(Grape)和鸭梨(Pear)。到底买什么好呢?我一阵思量。俗话说:“饭后一只烟,赛过活神仙。饭后吃苹果,西施见我躲。”为了老婆的漂亮,我决定买苹果。

?


下面开始Factory模式研究,当然是用我上面举的例子来说明。

Simple Factory模式

?


专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。

Factory Method模式

?


将对象的创建交由父类中定义的一个标准方法来完成,而不是其构造函数,究竟应该创建何种对象由具体的子类负责决定。

Abstract Factory模式

?


提供一个共同的接口来创建相互关联的多个对象。

?

?


一、Simple Factory模式:

?


1、? 在这里,我们先定义水果(Fruit)接口:

public interface Fruit {

? void plant();? //水果是被种植的

? void enableEat();? //水果能吃

}

2、? 苹果(Apple)是对水果(Fruit)接口的实现:

public class Apple implements Fruit{

? public void plant(){

??? System.out.println("种苹果!");

? }

? public void enableEat(){

??? System.out.println("苹果好吃!");

? }

}

3、? 葡萄(Grape)是对水果(Fruit)接口的实现:

public class Grape implements Fruit{

? public void plant(){

??? System.out.println("种葡萄!");

? }

? public void enableEat(){

??? System.out.println("葡萄好吃!");

? }

}

4、? 鸭梨(Pear)是对水果(Fruit)接口的实现:

public class Pear implements Fruit{

? public void plant(){

??? System.out.println("种鸭梨!");

? }

? public void enableEat(){

??? System.out.println("鸭梨好吃!");

? }

}

5、定义买水果(BuyFruit)这一过程类:

public class BuyFruit {

? /**

? 简单工厂方法

? */

? public static Fruit buyFruit(String which){

??? if (which.equalsIgnoreCase("apple")) {? //如果是苹果,则返回苹果实例

????? return new Apple();

??? }

??? else if (which.equalsIgnoreCase("pear")){? //如果是鸭梨,则返回鸭梨实例

????? return new Strawberry();

??? }

??? else if (which.equalsIgnoreCase("grape")) { //如果是葡萄,则返回葡萄实例

????? return new Grape();

??? }

??? else{

????? return null;

??? }

? }

}

6、? 编写测试类:

public class FruitTest {

? public static void? main(String args[]){

??? BuyFruit buy = new BuyFruit();?? //开始买水果这个过程

??? buy.buyFruit("apple").enableEat(); //调用苹果的enableEat()方法

? }

}

7、? 说明:

A:我要购买苹果,只需向工厂角色(BuyFruit)请求即可。而工厂角色在接到请求后,会自行判断创建和提供哪一个产品。

B:但是对于工厂角色(BuyFruit)来说,增加新的产品(比如说增加草莓)就是一个痛苦的过程。工厂角色必须知道每一种产品,如何创建它们,以及何时向客户端提供它们。换言之,接纳新的产品意味着修改这个工厂。

C:因此Simple Factory模式的开放性比较差。

有什么办法可以解决这个问题吗?那就需要Factory Method模式来为我们服务了。

二、Factory Method模式:

?


1、同样,我们先定义水果(Fruit)接口:

public interface Fruit {

? void plant();? //水果是被种植的

? void enableEat();? //水果能吃

}

2、苹果(Apple)是对水果(Fruit)接口的实现:

public class Apple implements Fruit{

? public void plant(){

??? System.out.println("种苹果!");

? }

? public void enableEat(){

??? System.out.println("苹果好吃!");


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fasttalk/archive/2005/03/21/325402.aspx

热点排行