java設計模式---淺談2種工廠模式和單例模式
1、 工廠模式 。比如有一個統一介面 A ,這個A介面是一個標準 。如果有類 B 和 C 那麼 BC必須實現A介面 。
我們在以往的 方法生成這種物件的時候 A b=new B() ; A c=new C() ;這樣的方式來的 .但是如果不同的類需要不同的初始化的時候我們如果全部放在構造方法完成那麼
就嚴重破壞了 面向物件的概念 。 我們想要的就是一個工廠 Factory ,也就是一個代理 我們通過它的唯一介面來 產生不同型別的產品 。下面是一段程式碼 :
1、一般的工廠
interface Product //這裡介面只是為了保證 返回的物件可以 統一用 Product接受
{
void show() ;
}
class ProductA implements Product
{
@Override
public void show() {
System.out.println("Product A!");
}
}
class ProductB implements Product
{
@Override
public void show() {
System.out.println("Product B");
}
}
public class Factory //作為工廠來使用
{
public static Product getProduct(int product_index)
{
if(product_index==0)
return new ProductA();
if(1==product_index)
return new ProductB() ;
return null;
}
}
2、反射型別的工廠 ,看下面工廠方式 你有什麼感想呢?java web開發中經常用到
package me.test;
interface Product //這裡介面只是為了保證 返回的物件可以 統一用 Product接受
{
void show() ;
}
class ProductA implements Product
{
@Override
public void show() {
System.out.println("Product A!");
}
}
class ProductB implements Product
{
@Override
public void show() {
System.out.println("Product B!");
}
}
public class Factory //作為工廠來使用
{
public static Product getProduct(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
return (Product)Class.forName(className).newInstance() ;
}
public static void main(String []args) throws InstantiationException, IllegalAccessException, ClassNotFoundException
{
Product a=Factory.getProduct("me.test.ProductA") ;
a.show() ;
Product b=Factory.getProduct("me.test.ProductB") ;
b.show() ;
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
單例模式 Singleton 就是保證一個類只有一個例項 。。2中方法
1、
class One
{
private One(){}
private static One instance =null ;
public synchronized static One getInstance()
{
if(instance==null)
instance=new One() ;
return instance;
}
}
public class Singleton {
public static void main(String[] args)
{
Object obj1,obj2 ;
obj1=One.getInstance() ;
obj2=One.getInstance() ;
System.out.println("(obj1==obk2)="+(obj1==obj2)); //結果為True證明例項唯一
}
}
2、方法2 相比第一種方法 這種方法不需要一次次判斷內建物件是否為空
class One
{
private One(){}
private static One instance =new One() ;
public static One getInstance()
{
return instance ;
}
}
public class Singleton {
public static void main(String[] args)
{
Object obj1,obj2 ;
obj1=One.getInstance() ;
obj2=One.getInstance() ;
System.out.println("(obj1==obk2)="+(obj1==obj2)); //結果為True證明例項唯一
}
}
相關推薦
java設計模式---淺談2種工廠模式和單例模式
1、 工廠模式 。比如有一個統一介面 A ,這個A介面是一個標準 。如果有類 B 和 C 那麼 BC必須實現A介面 。 我們在以往的 方法生成這種物件的時候 A b=new B() ; A c=new C() ;這樣的方式來的 .但是如果不同的
scala 基礎十二 scala apply的使用,工廠方法和單例模式的實現
定義 其他 返回 pack 新的 true 伴生對象 args null 1. apply 可以用來實現類似於靜態的初始化類的實例,請看下面實例 package smart.iot class applyclass { } class A {
C++工廠類和單例模式的結合使用
單例模式: 簡單來說一個類只有一個例項且封裝性好。這裡用巨集定義實現。 animal_singleton.h #pragma once #include <iostream> #define IMPLEMENTION_SINGLETON_CL
Java中常見的設計模式---簡單工廠模式、工廠方法模式和單例模式
在講設計模式之前,我們首先來說一下面向物件思想的設計原則,在實際的開發中,我們要想更深入的瞭解面向物件思想,就必須熟悉前人總結過的面向物件的思想的設計原則:1.單一職責原則:“高內聚,低耦合”,也就是說,每個類應該只有一個職責,對外只能提供一種功能,而引起類變化的原因應該只有
設計模式的征途—2.簡單工廠(Simple Factory)模式
工廠模式是最常用的一種建立型模式,通常所說的工廠模式一般是指工廠方法模式。本篇是是工廠方法模式的“小弟”,我們可以將其理解為工廠方法模式的預備知識,它不屬於GoF 23種設計模式,但在軟體開發中卻也應用地比較頻繁。此外,工廠方法模式還有一位“大哥”—抽象工廠模式,會在後面進行介紹。 簡單工廠
常見的設計模式之工廠模式和單例模式
工廠模式 工廠方法模式有兩個抽象類,一個是產品抽象類,一個是工廠抽象類,若干個具體產品類和對應的具體工廠類,具體產品抽象類與產品抽象類是實現關係,與具體工廠類是依賴關係,具體工廠類與抽象工廠類是實現關係。 客戶端程式碼如下 工廠模式是定義一個用於建立物件的介面,讓子類決定將哪一個
java中工廠模式和單例模式詳解
如何將例項化具體類的程式碼從應用中抽離或者封裝起來,使它們不會干擾應用的其他部分? 1:簡單工廠模式:其作用是例項化物件而不需要客戶瞭解這個物件屬於那個具體的子類。 using System; using System.Collections; public class MyClass {
java中的3種方式建立的單例模式
package com.fwd; import java.io.IOException; /** * 單例模式3種建立方式 * @author fwd * 2016年12月1日16:04:4
JAVA中的工廠模式和單例模式講解
轉載:http://blog.csdn.net/fangleijiang/article/details/19912667 1.單例模式 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個例項而且該例
自己對設計模式的理解:工廠模式和單例模式
一、工廠模式:個人總結class Factory {static function createObject($par){if ($par == 1) {$test1 = new Object1();} elseif ($par == 2) {$test2 = new O
Java枚舉enum以及應用:枚舉實現單例模式
tee configure adr 自由 這樣的 pre 單例模式 做到 build 枚舉作為一個常規的語言概念,一直到Java5才誕生不得不說有點奇怪,以至於到現在為止很多程序員仍然更喜歡用static final的形式去命名常量而不使用,一般情況下,Java程序員用這種
三種方式構建C#單例模式
同時 編譯 lec moni 單例對象 spa code exc 另一個 1 /// <summary> 2 /// 雙檢鎖實現單例 3 /// </summary> 4 public sealed
Java基礎-static關鍵字和單例模式
static關鍵字 static關鍵字的特點 用來修飾類的成員-修飾成員變數的稱之為類變數(靜態變數),修飾成員方法的稱之為類方法(靜態方法)。(屬性拿static修飾完之後就不叫屬性了,他也就不屬於任何物件了,而是屬於多個物件共享的,就叫類變數或靜態變數,方法也一樣)
輕鬆理解-中高階java開發必知必會之 遇見最好的單例模式
什麼是單例模式? 單例模式確保某個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 很多教程裡都寫不好的寫法和好的寫法這裡我只介紹好的寫法; 使用語法糖是最好的寫法,站在巨人的肩膀上會減少很多問題 一、我們使用java的類級內部類和靜態初始化來保證單利模式的可行性:
Effective Java 第二版 中文版 筆記(三)列舉實現單例模式
列舉實現單例模式: public enum DataSourceEnum { DATASOURCE; private DBConnection connection = null; private DataSourceEnum() {
設計模式與XML(二)建造者模式和單例模式(C++)
一、實驗目的及要求 1、掌握建立型模式的概念。 2、掌握工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式的構造方式及使用情景。 二、實驗裝置(環境) 1、 軟體需求: Dev-Cpp5.4, Rational Rose / Microsoft Visio
Python的工廠模式和單例模式
工廠模式: 解耦 定義類或方法,讓其功能越單一越好 #!/usr/bin/python #coding:utf-8 class Cake(): def __init__(self,weidao=
Java中靜態成員類及靜態內部類的Builder模式構建物件、靜態內部類構建單例模式
一、什麼是巢狀類 巢狀類是指被定義在另一個類的內部的類。巢狀類存在的目的應該只是為他的外圍類提供服務。如果巢狀類將來可能會用於其他的某個環境中,它就應該是頂層類。巢狀類有四種:靜態成員類、非靜態成員類、匿名類和區域性類。除了第一種之外,其他三種被稱為內部類。
關於工廠模式和單例模式的融合用法的個人見解
最近在思考spring程式碼如何降低記憶體消耗,減少物件建立的問題。後來想到使用工廠模式+單例模式來實現。此處就不貼程式碼了。直接介紹原理: 1,提供一個工廠類Factory,來提供一個統一的入口,讓APP統一從入口呼叫,獲取想要的類的物件。 2,為使用者提供的類的物件,
Java基礎筆記9——反射、Junit、註解、單例模式
Java基礎筆記9 十五、反射 通過獲取指定類的Class資訊,剖析該類具有的屬性、方法、構造方法等等資訊。這個過程就是反射的過程。 剖析類——得到類內部資訊來實現特定功能。 能夠實現解耦操作。 Class — 代表位元組碼的類 — 代表類的類——反射的核心 Field — 代表屬性的類 C