介面的工廠設計模式和代理設計模式
1.工廠設計模式
工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一
種建立物件的最佳方式。避免了子類與父類介面的耦合關係,當介面有多個子類時,可以消除更換子類對主方法的影響。
在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。
目的:定義一個建立物件的介面,讓其子類自己決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。
看例子:
interface Fruit{
void eat();
}
class Apple implements Fruit{
@Override
public void eat() {
System.out.println("eat Apple!");
}
}
class Orange implements Fruit{
@Override
public void eat() {
System.out.println("eat orange!");
}
}
/** 工廠類,作為中間類來解除父類介面與其子類的耦合性 */
class Factory{
public static Fruit getInstance(String className) {
if ("Apple".equals(className)) {
return new Apple();
}
if("Orange".equals(className)) {
return new Orange();
}
return null;
}
}
public class Bo {
public static void main(String[] args) {
// 介面通過工廠類取得其例項化物件,避免了new關鍵字,解除了耦合
Fruit f1 = Factory.getInstance("Apple" );
f1.eat();
Fruit f2 = Factory.getInstance("Orange");
f2.eat();
}
}
結果是:
eat Apple!
eat orange!
2.介面的代理設計模式
代理模式:兩個子類共同完成一個介面的功能,其中一個子類負責真實的介面功能實現,另一個子類負責輔助真實功能
的完成。
目的:為其他物件提供一種代理以控制對這個物件的訪問。
看例子:
interface Subject{
void eat();
}
class RealSubject implements Subject{
@Override
public void eat() {
System.out.println("eat food!");
}
}
/** 物件時加上一個對此物件的訪問層 */
class ProxySubject implements Subject{
// 真實的操作業務
private Subject sub;
public ProxySubject(Subject sub) {
this.sub = sub;
}
// 真實業務前期輔助
public void preparation() {
System.out.println("make food!");
}
// 真實業務後期輔助
public void postProcessing() {
System.out.println("wash up!");
}
// 真實業務實現
public void eat() {
this.preparation();
this.sub.eat();
this.postProcessing();
}
}
class Factory{
public static Subject getInstance() {
return new ProxySubject(new RealSubject());
}
}
public class ProxyModeTest {
public static void main(String[] args) {
Subject sub = Factory.getInstance();
sub.eat();
}
}
結果是:
make food!
eat food!
wash up!
實質:所有的真實業務都有一個輔助的工具類共同完成。
相關推薦
介面的工廠設計模式和代理設計模式
1.工廠設計模式 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一 種建立物件的最佳方式。避免了子類與父類介面的耦合
我的設計模式:工廠模式和橋梁模式
工廠模式 橋梁模式 抽象工廠模式 1.簡單工廠模式 Factory Method Pattern能生產某類(接口管理)東東,可以指定特定的類延遲初始化: 使用全局變量Map減少類的初始化過程獲取接口下的全部實現類:ClassUtils2.抽象工廠模式 Abstract Factory
大話設計模式——裝飾模式和代理模式(一)
區別 接口 需要 構圖 技術分享 開閉 tro 可能 code 1、是什麽? 裝飾模式:動態地給一個對象添加額外的職責。 代理模式:其他對象通過對象A去訪問對象B。 2、為什麽用? 裝飾模式:1、遵循開閉原則,盡量不去修改原有的類。2、裝飾對象一般都是添加額外的
常見的設計模式之工廠模式和單例模式
工廠模式 工廠方法模式有兩個抽象類,一個是產品抽象類,一個是工廠抽象類,若干個具體產品類和對應的具體工廠類,具體產品抽象類與產品抽象類是實現關係,與具體工廠類是依賴關係,具體工廠類與抽象工廠類是實現關係。 客戶端程式碼如下 工廠模式是定義一個用於建立物件的介面,讓子類決定將哪一個
Java進階篇設計模式之七 ----- 享元模式和代理模式
前言 在上一篇中我們學習了結構型模式的組合模式和過濾器模式。本篇則來學習下結構型模式最後的兩個模式, 享元模式和代理模式。 享元模式 簡介 享元模式主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。 用通俗的話來
每日設計模式——代理模式和裝飾器模式的區別
代理模式和裝飾器模式的區別 首先我們對比一下代理模式和裝飾器模式的類圖結構: 代理模式: 這兩個設計模式看起來很像。對裝飾器模式來說,裝飾者(Decorator)和被裝飾者(ConcreateComponnet)都實現同一個 介面。對代理模式來說,代理類(Proxy
Java中常見的設計模式---簡單工廠模式、工廠方法模式和單例模式
在講設計模式之前,我們首先來說一下面向物件思想的設計原則,在實際的開發中,我們要想更深入的瞭解面向物件思想,就必須熟悉前人總結過的面向物件的思想的設計原則:1.單一職責原則:“高內聚,低耦合”,也就是說,每個類應該只有一個職責,對外只能提供一種功能,而引起類變化的原因應該只有
Java設計模式, 單例模式,工廠模式,建造者模式和觀察者模式
1、單例模式 寫法: 懶漢式 /** * 懶漢模式 * 宣告一個靜態物件,並且在第一次呼叫getInstance 方法時進行初始化 * Created by Bill on 2017/12
Spring 實現兩種設計模式:工廠模式和單態模式
本文摘自:李剛 著 《輕量級 Java EE企業應用實戰 Struts2+Spring+hibernate整合開發》 在Spring 中大量使用的以下兩種設計模式:工廠模式和單態模式。 工廠模式可將Java 物件的呼叫者從被呼叫者的實現邏輯中分離出來,呼
java設計模式---淺談2種工廠模式和單例模式
1、 工廠模式 。比如有一個統一介面 A ,這個A介面是一個標準 。如果有類 B 和 C 那麼 BC必須實現A介面 。 我們在以往的 方法生成這種物件的時候 A b=new B() ; A c=new C() ;這樣的方式來的 .但是如果不同的
設計模式之裝飾模式和代理模式區別與聯絡
一.你在一個地方寫裝飾,大家就知道這是在增加功能,你寫代理,大家就知道是在限制 1.最常見的代理就是許可權判斷了,許可權就肯定是限制了 2.裝飾模式是指增強被包裝物件的功能 代理模式是修改被代理物件的行為 3.例子:
《設計模式之禪》學習小節之模板方法模式,建造者模式和代理模式
一。模板方法模式 其通用類圖如下: 模板方法可以用來定義一個演算法框架;通過將演算法對基本方法的排程封裝在抽象類的公開方法中(模板方法),同時把基本方法交給子類實現;實現了封裝不變部分,擴充套件可變部分的目的。另外,應儘量將基本方法的訪問許可權宣告為保護。 二。建造者
自己對設計模式的理解:工廠模式和單例模式
一、工廠模式:個人總結class Factory {static function createObject($par){if ($par == 1) {$test1 = new Object1();} elseif ($par == 2) {$test2 = new O
Spring實現兩種設計模式:工廠模式和單態模式
工廠模式可將Java 物件的呼叫者從被呼叫者的實現邏輯中分離出來,呼叫者只需關心被呼叫者必須滿足的規則(介面) ,而不必關心例項的具體實現過程。這是面向介面程式設計的優勢,能提高程式的解耦,避免所有的類以硬編碼方式耦合在一起。 如果所有的類直接耦合,極易形成
java設計模式之代理設計模式(Proxy)
pub 客戶端 clas bject 模式 只需要 java 接口 new 一個簡單Proxy代理模式範例 interface Subject{ //定義核心主題所要完成的功能 public void make(); } class RealSubj
Java進階篇設計模式之四 -----適配器模式和橋接模式
原則 pub 是我 protect 接口 logs 將不 多說 外鏈 前言 在上一篇中我們學習了創建型模式的建造者模式和原型模式。本篇則來學習下結構型模式的適配器模式和橋接模式。 適配器模式 簡介 適配器模式是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模
Java進階篇設計模式之五-----外觀模式和裝飾器模式
和我 logs 適配器模式 del xtra implement () 實例化 網絡遊戲 前言 在上一篇中我們學習了結構型模式的適配器模式和橋接模式。本篇則來學習下結構型模式的外觀模式和裝飾器模式。 外觀模式 簡介 外觀模式隱藏系統的復雜性,並向客戶端提供了一個客戶端可以
設計模式(22)-----代理設計模式-----靜態代理
一:用繼承實現靜態代理 1 package com.DesignPatterns.al.Dynamic1; 2 3 public interface Moveable { 4 public void move(); 5 } package com.DesignPa
設計模式(23)-----代理設計模式-----動態代理
一:自己手寫動態代理 1.1,把一串靜態的字串(代理類)載入輸出,編譯,載入到記憶體,並且反射獲取這個物件 public interface Moveable { public void move(); } 1 package com.DesignP
Java進階篇設計模式之十 ---- 訪問者模式和中介者模式
前言 在上一篇中我們學習了結構型模式的直譯器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern)。本篇則來學習下行為型模式的兩個模式,訪問者模式(Visitor Pattern)和中介者模式(Mediator Pattern)。 訪問者模式 簡介 訪問者