1. 程式人生 > >工廠模式個人寫個小例子進行總結

工廠模式個人寫個小例子進行總結

工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如A a=new A() 工廠模式也是用來建立例項物件的,所以以後new時就要多個心眼,是否可以考慮使用工廠模式,雖然這樣做,可能多做一些工作,但會給你係統帶來更大的可擴充套件性和儘量少的修改量。

這裡面舉一個恰當的小例子:

需求是這樣的,你有一個商店,商店裡面有三種賣東西的方式,根據的總錢數和傳遞進來賣東西的方式來確定最後結賬需要付錢的總數。

如果是平時的話,我們在一個類裡面寫一大堆的方法來弄,但是如果要用工廠模式呢,我們要怎麼辦呢?

第一步:建立一個工廠類,這個類裡面只有一個靜態方法,這個方法就是我們賣貨物的售賣方式,並且當我們呼叫這個方法的時候會往方法裡面傳遞一個售賣貨物的的方式。如下面程式碼所示:

public class SaleFactory {
    public static SaleBehavior create(int which){
        switch (which) {
            case Store.DISCOUNT_5:
                return new SaleHalf();
            case DISCOUNT_8:
                return new 
SaleEight(); case DISCOUNT_FULL: return new SaleFull(); default: return new SaleDefault(); } } }
第二步:建立四個售賣貨物的方法,這四個方法要分開建立到不同的類,
但是這四個法唯一的不同就是資料演算法的不同,所以呢讓他們都實現了賣東西的介面
public interface SaleBehavior {

    float sale(float money);

}
當這四個方法實現了這個介面的時候都會複寫sale的方法,根據自己賣東西的特點,在這裡面進行具體問題具體分析,。比如半價出售的可以這麼寫
public class SaleHalf implements SaleBehavior {
    @Override
public float sale (float money) {
        return money * 0.5f;
    }
}

第三步:在商店類裡面進行歸總,首先賣東西是要有賣東西的物件的,並且這裡面要把金錢的總錢數算清楚,如下面程式碼所示
public class Store {

    public static final int DISCOUNT_5 = 1;
    public static final int DISCOUNT_8 = 2;
    public static final int DISCOUNT_FULL = 3;

    private SaleBehavior mBehavior;

    public float sell (int count, float price) {
        float money = count * price;
        if (mBehavior == null) return money;
        return mBehavior.sale(money);
    }

    public void setBehavior (SaleBehavior behavior) {
        mBehavior = behavior;
    }
}
第四步:當我們要用到這個類的時候,我們就可以用下面的方式進行實現了
Store store = new Store();
store.setBehavior(new SaleFull());
float money = store.sell(3, 200);
這裡面是new出來一個商店類,給商店類加一個打折的方式,然後把錢 和商品的數量輸入進去就可以了,,
通過工廠模式寫出來的程式碼必要多,但是後期的維護很容易,不用 改主體



相關推薦

工廠模式個人例子進行總結

工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。因為工廠模式就相當於建立例項物件的

M03 利用Accord 進行機器學習的第一例子

statistic decide blog cat studio mac eap strong cte 01 安裝 Visual studio 2017. 不具備安裝這個的話,也可安裝,Microsoft Visual Studio Express (or equiva

用python2.7.9 程序搜索某個目錄下行有某關鍵字

getcwd blog 由於 python for odin 小程序 文件中 tde # -*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding("utf-8")import osdef print_

程序查看500以內的質數

小程序 圖片 oba info style div sta prim http ‘‘‘ 寫一個500以內的Eratosthenes篩法找出全部素數 ‘‘‘ class node(object): def __init__(self,num): se

Sql行轉列的兩例子

SQL行轉列 所謂行轉列就是將某一個category型別的列(nx1的矩陣,實質是有m類),目標是將多行轉換成為多列(新增m列)。 例1:模擬順豐SQL小例子 ##順豐面試題(SQLite編碼實現題目) import sqlite3 conn=sqlite3.con

多態的兩例子

getclass ava stat new 隱式 static return 應該 多態 class A { public String show(B obj){ return ("A and D"); } public String

RabbitMQ及其.NET客戶端——幾例子

一、簡單生產者-消費者(使用direct交換器) 1、生產者   var factory = new ConnectionFactory();//例項化一個工廠 factory.HostName = "localhost"; factory.UserName = "honnnnl";

easyui根據文件例子

layout佈局、according可摺疊、tab選項卡,動態新增選項卡。       *注:這種外掛其實匯入一個封裝的css和js檔案。基於jQuery.可以使了。 <!DOCTYPE html> <html lang="en"> <hea

學習c++多型的幾例子

//reference: http://blog.csdn.net/hackbuteer1/article/details/7475622 #include<iostream> #include<string> #include <vect

C++設計模式——簡單工廠模式及具體應用(含例子

前言 Iphone 6即將面世過程中,富士康集團正在為Iphone6的面世做著最後的衝刺,生產線上的工人正忙碌著為Iphone6進行各道流程的加工操作。作為代工工廠,富士康為世界上IT巨頭,如:蘋果,惠普等加工出各種產品。市場上看到的各種品牌電腦,絕大部分來在富士康這

python的迴圈——幾例子

1、整數序列求和。使用者輸入一個正整數N,計算從1到N(包含1和N)相加之後的結果。          2、九九乘法表輸出。          3、階乘計算。計算1+2!+3!+……10!的結果         4、健康食譜輸出。列出5種不同的食材,請輸出他們可能組成的所

例子來介紹一下JDK8的CompletableFuture

程式碼要解決的問題是:在兩個執行緒裡並行執行任務A和任務B,只要有一個任務完成了,就執行任務C。程式碼如下: import java.time.LocalTime; import java.util.Random; import java.util.concurrent.

使用Dagger2建立的第一例子

將Dagger系列的咖啡壺例子再做一下簡化,作為Dagger2的入門的第一個小例子。 場景描述:有一個電水壺,它使用一個加熱器來燒水。電水壺具備的功能有:開始加熱(on方法),結束加熱(off方法),倒水(brew方法)。 正確使用Dagger2要按照以下5個步驟來進行:

例子--memory leak

C++程式設計師最害怕、最容易遇到的問題就是記憶體洩露,或是說非法訪問記憶體。 不想說太多的道理,就用幾個簡單的例子來詮釋。 指標超過作用域 void MemoryLeak( ) { int

ruby+selenium-webdriver一步一步完成自動化測試-----第一例子

第一個小例子,登入soso首頁,簡單直觀易懂。通常我們都是這樣寫的,網上各種例子也是這樣的。 1.開啟文字編輯器SciTe2.file--new新建一個檔案,寫下如下程式碼 #encoding: utf-8 require 'rubygems' require 'sele

在批處理中使用ping命令,一個例子進行分析

   照例先說明一下我的問題:為公司開發的一個伺服器,用vc編寫,其中利用ado對oracle進行訪問(每一次有客戶端訪問伺服器的時候就對oracle資料庫進行一次update的操作),最近發現了一些

Java繼承的兩例子

首先上程式碼 public class A { protected String value = "123"; public A(){ System.out.println("A"); } public String get

工廠模式的生產披薩例子

定義簡單工廠 簡單工廠其實不是一個設計模式,反而比較像是一種程式設計習慣。 PizzaStore類,裡面有orderPizza()方法。 這裡是工廠的“客戶”。PizzaStore現在通過SimplePizzaFactory取得比薩例項。 SimpleP

html5 的 canvas 想專案 畫板

 最近在研究下 html5 的 canvas 想寫個小專案,練練手,結果寫了一個畫圖板,功能點有 繪製、直線、圓、方形、塗鴉、線條粗細、顏色切換、撤銷、回退、儲存、下載、外部圖片拖入等 , 用的技術是包含 html5 中的本地儲存、下載、canvas 等技術,上圖。 演示

Socket 單執行緒多使用者併發的兩例子

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include