1. 程式人生 > >內部類:匿名類和工廠模式結合

內部類:匿名類和工廠模式結合



/*
 *  2018年3月26日10:46:19
 *  程式碼目的:
 *      顯示使用匿名內部類結合工廠模式的使用

   工廠方法模式(Factory Method Pattern)又稱為工廠模式,
   也叫虛擬構造器(Virtual Constructor)模式或者多型工廠(Polymorphic Factory)模式,
   它屬於類建立型模式。在工廠方法模式中,
   工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,
   這樣做的目的是將產品類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪一個具體產品類。
   
   
   2.3. 模式結構
   
   工廠方法模式包含如下角色:
   •Product:抽象產品
   •ConcreteProduct:具體產品
   •Factory:抽象工廠
   •ConcreteFactory:具體工廠

 *     
 * */

//: innerclasses/Factories.java
import static net.mindview.util.Print.*;

//抽象產品
interface Service {
  void method1();
  void method2();
}
//抽象工廠
interface ServiceFactory {
  Service getService();
}	

//具體產品
class Implementation1 implements Service {
  private Implementation1() {}//私有構造器
  public void method1() {print("Implementation1 method1");}
  public void method2() {print("Implementation1 method2");}
  //具體工廠
  public static ServiceFactory factory =
    new ServiceFactory() {
      public Service getService() {
        return new Implementation1();
      }
    };
}	

class Implementation2 implements Service {
  private Implementation2() {}//私有構造器
  public void method1() {print("Implementation2 method1");}
  public void method2() {print("Implementation2 method2");}
  public static ServiceFactory factory =
    new ServiceFactory() {
      public Service getService() {
        return new Implementation2();
      }
    };
}	

public class Factories {
  public static void serviceConsumer(ServiceFactory fact) {
    Service s = fact.getService();
    s.method1();
    s.method2();
  }
  public static void main(String[] args) {
//	  現在用於Implementation1和Implementation2的構造器都可以是private,
//	  並且沒有任何必要去建立工廠的具名類,另外你只需要建立單一的工廠物件。因此
//	  在本例中它被建立為Service實現中的一個static域
    serviceConsumer(Implementation1.factory);
    // Implementations are completely interchangeable:
    serviceConsumer(Implementation2.factory);
  }
} /* Output:
Implementation1 method1
Implementation1 method2
Implementation2 method1
Implementation2 method2
*///:~

相關推薦

部類匿名工廠模式結合

/* *  2018年3月26日10:46:19 *  程式碼目的: *      顯示使用匿名內部類結合工廠模式的使用   工廠方法模式(Factory Method Pattern)又稱為工廠模

深入理解java巢狀部類匿名

四、在外部類中定義內部類 匿名類就是沒有名字的內部類,是內部類的一種特殊情況。?????????  這句話對嗎??? 前端時間在寫.net專案中,一直錯將.cs裡的兩個class當作內部類,原來是一個檔案裡的兩個類而已,這讓我想起了Java中的內部類,比較內部類,那麼還有兩個類,那就是匿名類和匿名

java巢狀部類匿名

4、匿名內部類 abstract class Person { public abstract void showCareer(); } public class Teacher extends Person{ @Override public void showCareer()

【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.5 部類匿名

/** * 內部類與匿名類 * @author cnRicky * @date 2018.11.10 */ 內部類與匿名類 內部類(inner class)是在其他類中的類 匿名類(anonymous class)是一種特殊的內部類,它沒有類名 內部類(Inner class)

Java中的部類匿名匿名部類

內部類 Java中在一個類的內部定義的類叫做內部類(inner class)。建立一個內部類時,其物件就擁有了與外部類物件之間的關係。這種通過this來引用形成的,是內部類物件可以隨意訪問外部類中的所有成員變數!(因為被private修飾的成員變數和成員方法僅能被該類所使用,內部類中可以

Java筆記丨20 部類匿名

內部類是在其他類中的類 匿名類是一種特殊的內部類,它沒有類名   內部類 內部類的定義 將類的定義class xxxx{…}置入一個類的內部即可 編譯器生成xxxx$xxxx這樣的class檔案 內部類不能與外部類同名 內部類的使用 在封裝它的類的內部使

部類匿名

內部類顧名思義就是一個類內的類。是為了方便而被建立的,內部類可以呼叫外部類的方法屬性,而外部類想要呼叫內部類需要先例項化物件然後通過物件進行呼叫。 內部類分兩種1.成員內部類2.區域性內部類 匿名類也是為了方便而產生的在安卓開發中很常見,先看一個例子: clas

Java基礎之內部類匿名異常處理知識點總結

Object是java中已有的一個所有類的父類。也稱為根類,你可以把它理解為java中的上帝。java中的類都是直接或者間接繼承自object類。 該類的出現:是封裝了所有物件都具備的方法。所有物件都具備方法有哪些呢? boolean  equals

TreeSet、Comparable、Comparator、部類匿名

1 package com.tn.treeSet; 2 3 public class Student { 4 private String name; 5 private int age; 6 public Student(){}

java/c++中部類匿名

1.java中的內部類: class Outside{ private String nameString ; private int age; Outside() {

JAVA監聽器新增的四種方式(自身、外部類部類匿名

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ThisClassEvent extends JFrame implements Acti

Java部類匿名及this使用

http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html http://www.cnblogs.com/hujunzheng/p/3871928.html

java之執行緒建立的兩種方式,六種狀態匿名部類建立子或實現物件

一.匿名內部類建立子類或實現類物件 new Test(){} 相當於建立了Test類的子類物件 並且沒有類名 建立介面實現類 new 介面名() {};介面實現類的物件 注意 : new 後邊是類或者介面名 大括號內是類或者介面中的方法 public

再續匿名部類呼叫父方法或訪問父成員

public class Fat { protected String x="hi";

“全棧2019”Java第一百零六章匿名部類與抽象接口註意事項

inf href 匿名 頭條號 java學習 info intellij tel https 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文鏈接 “全棧2019”Jav

“全棧2019”Java第一百零六章匿名部類與抽象介面注意事項

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第一百零六章:匿名內部類與抽象類介面注意事項 下一章 “全棧2019”Java第一百零七章:

java關於部類,外部類匿名)的相關面試題

一個“.java”原始檔中是否可以包含多個類(不是內部類)?有什麼限制? 答:可以,但一個原始檔中最多隻能有一個公開類(public class)而且檔名必須和公開類的類名完全保持一 致。 Anonymous Inner Class(匿名內部類)是否可以繼承其它類?是否可以實現介面

部類------巢狀、區域性匿名、lambda

巢狀類、區域性類:是帶有名字的,可以多次使用,巢狀類使用相對更為靈活一點,區域性類在函式內內部。匿名類只是使用一次,lambda是匿名類的簡寫。 巢狀類: 是否有名稱空間:是 是否可以生面為static型別:可以宣告為static類,建立方式OuterClass.S

Java23種設計模式策略模式工廠模式

因為目前產品用到了策略模式,比如國內的使用者註冊走A流程,美國使用者走B流程,印度使用者走C流程,每個流程有些相同,有些則完全不一樣。 這兩種設計模式非常容易弄混淆。   策略模式和工廠模式: 1. 關注點不一樣,工廠模式關注物件建立,策略模式關注行為封裝 2.解決的問題不

部類匿名部類物件的初始化過程

一般用於類的設計: 分析事物時,發現該事物描述中海油事物,而且這個事物還在訪問被描述事物的內容 這時就是還有的事物定義成內部類來描述 為什麼內部類能直接訪問外部類中成員呢?  那是因為內部類持有了外部類的引用。外部類名:this 內部類可以存放在區域性位置上 內部類