1. 程式人生 > >介面的工廠設計模式和代理設計模式

介面的工廠設計模式和代理設計模式

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)。 訪問者模式 簡介 訪問者