城市獵人

          在一網(wǎng)情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
          posts - 1, comments - 7, trackbacks - 0, articles - 89
          工廠模式是專門負(fù)責(zé)將大量有共同接口的類實(shí)例化,而且不必事先知道每次是要實(shí)例化哪一個(gè)類的模式。

          一、工廠模式有三種形態(tài)  
              簡(jiǎn)單工廠(Simple Factory)模式 ,又稱靜態(tài)工廠模式
           工廠方法(Factory Method)模式,又稱多形性工廠(Polymorphic Factory)模式
           抽象工廠(Abstract Factory)模式,又稱工具箱(Kit或Toolkit)模式 

          二、簡(jiǎn)單工廠模式

                  《Head First 設(shè)計(jì)模式》認(rèn)為它不是一個(gè)設(shè)計(jì)模式,更像一種編程習(xí)慣,優(yōu)點(diǎn)是可以將客戶端程序從具體類中解耦,不失為一個(gè)簡(jiǎn)單的方法。

          1、定義
              
          簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出那一種產(chǎn)品類的實(shí)例,它是由一個(gè)工廠類根據(jù)傳入的參量決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。

          2、角色
              簡(jiǎn)單工廠模式涉及到工廠角色、抽象角色以及具體產(chǎn)品角色等
              
              工廠類(Creator)角色:擔(dān)任這個(gè)角色的是工廠方法模式的核心,含有與應(yīng)用緊密相關(guān)的商業(yè)邏輯。工廠類在客戶端的直接調(diào)用下創(chuàng)建產(chǎn)品對(duì)象,它往往由一個(gè)具體的JAVA類實(shí)現(xiàn)。

              抽象產(chǎn)品(Product)角色:擔(dān)任這個(gè)角色的類是工廠方法模式所創(chuàng)建的對(duì)象的父類,或他們共同擁有的接口。抽象產(chǎn)品角色可以用一個(gè)java接口或者Java抽象類實(shí)現(xiàn)。

              具體產(chǎn)品(Concrete Product)角色:工廠方法模式所創(chuàng)建的任何對(duì)象是這個(gè)角色的實(shí)例,具體產(chǎn)品角色由一個(gè)具體java類實(shí)現(xiàn)。

          3、實(shí)例


           1package com.sailor.simpleFactory;
           2
           3public abstract class Product {
           4
           5    public void produce(){
           6        System.out.println("生產(chǎn)產(chǎn)品");
           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 * 具體產(chǎn)品
           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("生產(chǎn)小汽車");
          16    }

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

          22
          23}

          24


           1package com.sailor.simpleFactory;
           2
           3/**
           4 * 具體產(chǎn)品
           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("生產(chǎn)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}
          主站蜘蛛池模板: 金溪县| 沂水县| 桂东县| 瓦房店市| 蒙城县| 曲周县| 达拉特旗| 崇阳县| 平南县| 江达县| 巢湖市| 西昌市| 定兴县| 安泽县| 碌曲县| 桃园市| 阿瓦提县| 金塔县| 万盛区| 柘荣县| 双江| 斗六市| 罗甸县| 即墨市| 东海县| 米泉市| 东阿县| 马公市| 仙游县| 弥勒县| 集贤县| 甘孜县| 偏关县| 焦作市| 大姚县| 甘南县| 盘山县| 虞城县| 彭州市| 华坪县| 罗江县|