1. 程式人生 > >Java 反射之工廠模式

Java 反射之工廠模式

一.簡單工廠模式

//介面
package Factory;

public interface Fruit {
    public void eat(); //吃
}
//實現介面類
package Factory;

public class Apple implements Fruit{

    public Apple() {
        // TODO Auto-generated constructor stub
    }

    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃蘋果!"
); } } package Factory; public class Banana implements Fruit{ public Banana() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃香蕉!"); } }
package Factory;

public class Orange implements
Fruit{
public Orange() { // TODO Auto-generated constructor stub } public void eat() { // TODO Auto-generated method stub System.out.println("吃橘子"); } }
//工廠類
package Factory;

public class Factory {

    public Factory() {
        // TODO Auto-generated constructor stub
} public static Fruit getInstance(String className){ if("apple".equals(className)) return new Apple(); //返回一個物件 if("banana".equals(className)) return new Banana(); if("orange".equals(className)) return new Orange(); return null; } }
//主方法
package Factory;

import java.util.Scanner;

public class FactoryTest {

    public FactoryTest() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);
        String className=scanner.nextLine();//輸入想要建立物件的名字
       Fruit f=Factory.getInstance( className); //呼叫並接收
      f.eat();
    }

}

執行結果:
這裡寫圖片描述這裡寫圖片描述
這裡寫圖片描述
這個工廠類是最簡單的工廠類,可以體會到工廠模式的設計思想,但是每次想新增一個類都需要更改大量的程式碼,所以後來演變了一個更方便使用的工廠模式,利用反射機制建立物件,從而減少對程式碼的修改。

如果想再新增一個葡萄類
package Factory;

public class Grape implements Fruit{

public Grape() {
    // TODO Auto-generated constructor stub
}

@Override
public void eat() {
    // TODO Auto-generated method stub
    System.out.println("吃葡萄!");
}

}

//要在返回物件那多加一個建立葡萄類

package Factory;

public class Factory {

    public Factory() {
        // TODO Auto-generated constructor stub

    }
    public static Fruit getInstance(String className){
        if("apple".equals(className))
            return new Apple();
        if("banana".equals(className))
            return new Banana();
        if("orange".equals(className))
            return new Orange();
        if("grape".equals(className))
            return new Grape(); //這裡還要修改
        return null;
    }

}

執行結果:
這裡寫圖片描述
這樣對程式碼的修改量會增大,這只是一個簡單的工廠模式,若果放到一個專案當中那修改的程式碼量遠遠比這個要多很多。

二.反射之工廠模式

//介面
package fanshe;

public interface Fruit {
    public void eat(); //吃

}
//實現介面的類
package fanshe;

public class Apple implements Fruit {

    public Apple() {
        // TODO Auto-generated constructor stub
    }

    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃蘋果~!");
    }

}
package fanshe;

public class Banana implements Fruit{

    public Banana() {
        // TODO Auto-generated constructor stub
    }

    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃香蕉~!");
    }

}
package fanshe;

public class Orange implements Fruit {

    public Orange() {
        // TODO Auto-generated constructor stub
    }

    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃橘子~!");
    }

}
//工廠類
package fanshe;

public class Factory {

    public Factory() {
        // TODO Auto-generated constructor stub
    }
    public static Fruit getInstance(String className)
    {
        /*if("orange".equals(className))
            return new Orange();
        return null;*/
        Fruit fruit=null;
        try {
            fruit=(Fruit) Class.forName(className).newInstance();//建立物件


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return fruit;   

    }

}
//主方法
package fanshe;

import java.util.Scanner;

public class FactortDemo {

    public FactortDemo() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);
        String className=scanner.nextLine(); //輸入想要建立類的名字
     Fruit fruit=Factory.getInstance("fanshe."+className);
     fruit.eat();
    }

}

執行結果:
這裡寫圖片描述這裡寫圖片描述這裡寫圖片描述

如果再想新增一個葡萄類直接新增類就可以了,不用再修改其他程式碼,減少了程式碼的修改量

package fanshe;

public class Grape implements Fruit{

    public Grape() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃葡萄~!");
    }

}

執行結果:
這裡寫圖片描述

相關推薦

Java 反射工廠模式

一.簡單工廠模式 //介面 package Factory; public interface Fruit { public void eat(); //吃 } //實現介面類 package Factory; public class

Java學習工廠模式

工廠模式 實現了建立者和呼叫者的分離。 工廠模式的核心本質: – 例項化物件,用工廠方法代替new操作。 – 將選擇實現類、建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦。 1 簡單工廠模式 簡單工廠模式也叫靜態工廠模式,就是工廠類一般是使用靜態方法,通過接收的引數的不同來返回不

java -- 反射利用反射完善工廠設計模式

java的工廠設計模式源自於生活,大家先看一個例子,比較簡單,我剛開始瞭解工廠時看到的簡單例子。 interface IFruit { public void eat(); } class Apple implements IFruit { @Override pub

淺析JAVA設計模式工廠模式(二)

1.2 源碼 pub color post del tar pop south 1 工廠方法模式簡單介紹 工廠方法 (Factroy Method)模式:又稱多態性工廠模式(Polymorphic Factory),在這樣的模式中,核心工廠不再是一個詳

Java設計模式工廠模式

href 1.2 net main override create 靜態工廠方法 lan soft 工廠方法模式 工廠方法模式分為三種:普通工廠模式、多個工廠方法模式和靜態工廠方法模式。 1、普通工廠模式 普通工廠模式就是建立一個工廠類,對實現了同一接口的一些類進行實

Java設計模式工廠模式(二):抽象工廠模式

mar 模式 blank http left taxi ref www. app 2碳依5FVL冒傲3http://t.docin.com/etw488 am懦7鈉N山段9慌Q闌http://shequ.docin.com/ipu5657 iK1諾5N鍛認EUK剖嘲肆h

JAVA 設計模式 工廠模式

java 工廠模式 設計模式 1、為什麽要使用工廠模式? 比方說,一位滴滴司機,如果要去開車掙錢的話,他得自己會制造汽車,然後,才能使用汽車掙錢;對於這位司機來說,要求很高了,畢竟汽車很難制造出來; 如果使用工廠模式的話,這位司機,只需要知道汽車工廠就可以了,直接去工廠提車就行。從

Java設計模式 工廠模式

Java設計模式 - 工廠模式   工廠模式使用場景: 工廠模式分為簡單工廠 工廠 抽象工廠模式. 當用戶需要一個類的子類例項,且不希望與該類的子類行成耦合或者不知道該類有哪些子類可用時,可採用工廠模式; 當用戶需要系統提供多個物件,且希望和建立物件的類解耦時,可採用抽象工廠模

Java 設計模式工廠模式

先說設計模式,設計模式都有哪些 java的設計模式大體上分為三大類: 建立型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。 結構型模式(7種):介面卡模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。 行

探究Java 設計模式工廠模式

Java作為一種面向物件的高階語言,程式開發中涉及到很多設計模式。 這篇博文與大家一起探討下工廠模式。 1. 為什麼要用工廠模式? “Talk is cheap,show me the code”. 想要找到這個問題的答案,我們先來看看下面這個專案。 專案很簡

JAVA設計模式工廠模式—Factory Pattern

1.工廠模式簡介 工廠模式用於物件的建立,使得客戶從具體的產品物件中被解耦。 2.工廠模式分類 這裡以製造coffee的例子開始工廠模式設計之旅。 我們知道coffee只是一種泛舉,在點購咖啡時需要指定具體的咖啡種類:美式咖啡、卡布奇諾、拿鐵等等。 /** *

Java設計模式學習工廠模式

在Java(或者叫做面嚮物件語言)的世界中,工廠模式被廣泛應用於專案中,也許你並沒有聽說過,不過也許你已經在使用了。Java 設計模式之工廠模式 簡單來說,工廠模式的出現源於增加程式序的可擴充套件性,降低耦合度。之所以叫做工廠模式,是用工廠生產產品來形象的比喻程式碼中生產物件的過程。總體來說,工廠模式分為以下

設計模式工廠模式——Java語言描述

工廠模式是Java中常見的設計模式之一,該設計模式屬於建立型模式,提供了一種建立物件的最佳方式。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件 介紹 應用例項 當我們需要購買一輛汽車時,只需要從工廠提貨而不

Java實現抽象工廠模式+java反射的機制

Java的反射機制:   JAVA反射機制是就是執行的狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件

JAVA設計模式工廠模式(簡單工廠模式+工廠方法模式)

 在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定; 選擇生成哪個子物件

Java程式設計師從笨鳥到菜鳥(三十二)23種設計模式工廠模式

設計模式的六大原則 開閉原則是最基礎的設計原則,其它的五個設計原則都是開閉原則的具體形態,依照java的語言的稱謂,開閉原則是抽象類,其它的五個原則是具體實現類 開閉原則:軟體實體應當對外擴充套件開放,對修改關閉,通俗點說就是應該在不修改原有程式碼的

Java[Android]設計模式工廠模式(簡單工廠模式+工廠方法模式+抽象工廠模式)

1. 寫在前面  網上關於設計模式的文章已經非常詳盡了,寫這篇文章旨在給自己的學習做一個筆記和總結方便以後翻閱查詢,若對你有用可細學之若覺得膚淺可略之。  工廠模式屬於建立型設計模式,分為簡單工廠模式,工廠方法模式,抽象工廠模式三種,話不多說,請看下面一一道來。2. 簡單工廠

JAVA設計模式工廠模式(簡單工廠模式+工廠方法模式+抽象工廠模式)

http://blog.csdn.net/jason0539/article/details/23020989 http://blog.csdn.net/jason0539/article/details/44976775

大型Java進階專題(四) 設計模式工廠模式

## 前言 ​ 今天開始我們專題的第三課了,開始對設計模式進行講解,本章節介紹:瞭解設計模式的由來,介紹設計模式能幫我們解決那些問題以及剖析工廠模式的歷史由來及應用場景。本章節參考資料書籍《Spring 5核心原理》中的第一篇 Spring 內功心法(Spring中常用的設計模式)(沒有電子檔,都是我取其精

漫談設計模式工廠模式

設計模式 策略模式 工廠模式 單例模式今天在這裏不過多介紹什麽是設計模式和為什麽要使用它?可以參考漫談設計模式之組合模式。一、什麽是抽象工廠設計模式? 一言以蔽之,抽象工廠就是用來創建功能相關的類,二、在什麽場景下使用它? 顧名思義,在我們的業務當中會有一種場景,有一個查詢頁面,上面有很多很多的查