中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA單例模式,工廠模式,觀察者模式是什么

發布時間:2021-03-10 17:06:35 來源:億速云 閱讀:159 作者:TREX 欄目:編程語言

本篇內容主要講解“JAVA單例模式,工廠模式,觀察者模式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JAVA單例模式,工廠模式,觀察者模式是什么”吧!

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態面向對象編程語言的代表,實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。


1.單例模式

每個類只能創建一個實例對象

Java Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。 使用Singleton的好處還在于可以節省內存,因為它限制了實例的個數,有利于Java垃圾回收(garbage collection)。

好處:

第一、控制資源的使用,通過線程同步來控制資源的并發訪問;

第二、控制實例產生的數量,達到節約資源的目的。

第三、作為通信媒介使用,也就是數據共享,它可以在不建立直接關聯的條件下,讓多個不相關的兩個線程或者進程之間實現通信。

應用場景:在線統計人數


public class SingleTon {

private SingleTon(){}

public static volatile SingleTon instance=null;
public static SingleTon getInstance( ){
synchronized (SingleTon.class){
if(instance==null){
instance=new SingleTon();
                             }
                }
}
return instance;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public void getInfo( ){
 System.out.println("name is "+name);
}
public static void main(String[] args) {

SingleTon s1 = SingleTon. getInstance( );
s1. setName( "0000" );

SingleTon s2 = SingleTon. getInstance( );
s2. setName( " 1111" );

s1. getInfo( );

s2.getInfo( );

if(s1 == s2){

System.out.println("是一個實例");}
else{
System. out. println("不是一個實例");
      }
}

synchronized 關鍵字,代表這個方法加鎖,

相當于不管哪一個線程A每次運行到這個方法時,

都要檢查有沒有其它正在用這個方法的線程B(或者C D等),

有的話要等正在使用這個方法的線程B(或者C D)運行完這個方法后再運行此線程A,

沒有的話,直接運行它包括兩種用法:synchronized 方法和 synchronized 塊

2.工廠模式

優點:

將創建實例的工作與使用實例的工作分開,使用者不必關心類對象如何創建,明確了職責。

把初始化實例時的工作放到工廠里進行,使代碼更容易維護。 更符合面向對象的原則,面向接口編程,而不是面向實現編程。

缺點:

由于工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。

要新增產品類的時候,就要修改工廠類的代碼,違反了開放封閉原則(對擴展的開放,對修改的關閉)。

簡單工廠模式由于使用了靜態工廠方法,靜態方法不能被繼承和重寫,會造成工廠角色無法形成基于繼承的等級結構。

public interface Sender{
public void Send();
}
public class MailSender implements Sender{
@0verride
public void Send( ) {
System.out.println("this is mailsender!");
}
public class SmsSender implements Sender{
@override
public void Send( ) {
System.out.println("this is sms sender!");
}
public class SenderFactory{
public Sender produce(String type){
        if("mail".equals(type)){
            return new MailSender();
        }else if("sms".equals(type)){
            return new SmsSender();
        }else {
            System.out.println("請輸入正確的類型!");
            return  null;
        }
        //多工廠模式
//        public Sender produceMail(){
//            return new MailSender();
//        }
//        public Sender produceSms(){
//            return new SmsSender();
//        }
    }
}

3觀察者模式

簡單地說,觀察者模式定義了一個一對多的依賴關系,讓一個或多個觀察者對象監聽一個主題對象。這樣一來,當被觀察者狀態發生改變時,需要通知相應的觀察者,使這些觀察者對象能夠自動更新。例如:GUI中的事件處理機制采用的就是觀察者模式.

//定義被觀察者所具有的接口
public interface Observable {
public void register0bserve(Observer observer);//注冊為一個觀察者
public void remove0bserve(Observer observer);//取消觀察 者
public void notifyobserves( );//通知所有觀察者更新信息
}

import com . example. demo . interfaceTest . observable;
import com. example . demo. interfaceTest Observer;
gimport java.util.Vector ;
public class Cup implements Observable {
//被觀察者維護的一個觀察者對象列表
private Vector<observer> vector = new Vector<observer>();
private float price;
public Cup(float price) {
this.price = price;
}
public float getPrice() {
return price;
public void setPrice(float price) {
this.price = price;
notifyobserves( ); //修改價格時通知觀察者
}
@override
public void register0bserve(Observer observer) {
/ /注冊觀察者
vector . add( observer);
}
@override
public void removeObserve(Observer observer) {
//取消觀察者
vector . remove(observer);
}
@override
public void notifyObserves() {
//實現通知所有的觀察者對象
for (Observer observer:vector){
observer update(price);
       }
}
package com. example. demo .interfaceTest
public interface observer {
public void update(float price);
}
package com. example . demo. test;
import com. example. demo. interfaceTestobserver:
public class Person implements Observer
private String name ;
public Person(String name ){
this.name = name ;
aoverride
public void update(float price) {
System. out. println(name+"關注的杯子的價格已更新為: "+price);
}
public static void main(String[] args) {
Cup cup
= new Cup( price: 3000);
Person p1 = new Person( name: "老哥”);
Person p2 = new Person( name:
"小弟”);
cup. registerObserve(p1);
cup. registerObserve(p2);
System. out. println("第1次修改價格");
cup. setPrice(2500);
System. out. println( "第2次修改價格" );
cup. setPrice(2000);
System. out. println("第3次修改價格");
cup. setPrice(1500);
//移除2號觀察者
cup. removeObserve(p2);
System. out. println("第4次修改價格”);
cup . setPrice(1000);
}

到此,相信大家對“JAVA單例模式,工廠模式,觀察者模式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖南省| 马鞍山市| 陕西省| 涿鹿县| 江门市| 富源县| 成安县| 松江区| 黄石市| 宁德市| 九龙坡区| 德令哈市| 天水市| 凉城县| 阿克陶县| 清河县| 丹凤县| 台山市| 敦化市| 通榆县| 沈阳市| 达日县| 孝昌县| 丰宁| 临邑县| 乌什县| 邵武市| 兴义市| 清徐县| 株洲市| 礼泉县| 武强县| 多伦县| 霍林郭勒市| 宜章县| 革吉县| 新源县| 苗栗市| 昂仁县| 荆门市| 泰宁县|