城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

模式(四-1):简单工厂(Simple Factory)模式

Posted on 2008-07-22 10:03 sailor 阅读(164) 评论(0)  编辑  收藏 所属分类: 模式
工厂模式是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。

一、工厂模式有三种形态  
    简单工厂(Simple Factory)模式 ,又称静态工厂模式
 工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式
 抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式 

二、简单工厂模式

        《Head First 设计模式》认为它不是一个设计模式,更像一种编程习惯,优点是可以将客户端程序从具体类中解耦,不失为一个简单的方法。

1、定义
    
简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例,它是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。

2、角色
    简单工厂模式涉及到工厂角色、抽象角色以及具体产品角色等
    
    工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的JAVA类实现。

    抽象产品(Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或他们共同拥有的接口。抽象产品角色可以用一个java接口或者Java抽象类实现。

    具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象是这个角色的实例,具体产品角色由一个具体java类实现。

3、实例


 1package com.sailor.simpleFactory;
 2
 3public abstract class Product {
 4
 5    public void produce(){
 6        System.out.println("生产产品");
 7    }

 8    
 9    public abstract void category();
10
11    
12    public abstract int salePrice();
13    
14}

15

 1/**
 2 * 
 3 */

 4package com.sailor.simpleFactory;
 5
 6/**
 7 * 具体产品
 8 * @author sailor
 9 * Jul 22, 2008 10:15:14 AM
10 */

11public class Car extends Product{
12
13    @Override
14    public void category() {
15        System.out.println("生产小汽车");
16    }

17
18    @Override
19    public int salePrice() {
20        return new Integer(10000);
21    }

22
23}

24


 1package com.sailor.simpleFactory;
 2
 3/**
 4 * 具体产品
 5 * @author sailor
 6 * Jul 22, 2008 10:17:12 AM
 7 */

 8public class Pizza extends Product{
 9
10    @Override
11    public void category() {
12        System.out.println("生产Pizza");
13    }

14
15    @Override
16    public int salePrice() {
17        return 20;
18    }

19
20}


 1/**
 2 * 工厂
 3 * @author sailor
 4 * Jul 22, 2008 10:13:23 AM
 5 */

 6public class SimpleFactory {
 7
 8    public static Product createProduct(String product){
 9        if("car".equals(product))
10            return new Car();
11        else if("pizza".equals(product))
12            return new Pizza();
13        else
14            return null;
15    }

16}

 1package com.sailor.simpleFactory;
 2
 3/**
 4 * 客户端
 5 * @author sailor
 6 * Jul 22, 2008 10:20:59 AM
 7 */

 8public class Client {
 9
10    /**
11     * @param args
12     */

13    public static void main(String[] args) {
14        
15        Product product1 = SimpleFactory.createProduct("car");    
16        product1.category();
17        product1.produce();
18        System.out.println("销售额: " + product1.salePrice());
19        
20        
21        Product product2 = SimpleFactory.createProduct("pizza");
22        product2.category();
23        product2.produce();
24        System.out.println("销售额: " + product2.salePrice());    
25    }

26}

只有注册用户登录后才能发表评论。


网站导航: