日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式

發(fā)布時間:2025/3/12 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、介紹,定義

抽象工廠模式也是創(chuàng)建型模式之一,抽象工廠模式起源于對不同操作系統(tǒng)的圖形化解決方案,如不同操作系統(tǒng)的按鈕和文本框控件及其實現(xiàn)。

為創(chuàng)建一組相關(guān)或者相互依賴的對象提供接口,而不需要具體指定他們的具體類。

二、使用場景

一個對象族有相同的約束時可以使用抽象工廠模式。(比如Android、IOS、Windows Phone下都有短信和撥號軟件)

三、UML類圖

8.png

AbstractFactory:抽象工廠角色,聲明了一組用于創(chuàng)建一種產(chǎn)品的方法,每個方法對應(yīng)生產(chǎn)一種產(chǎn)品,上面生成產(chǎn)品A和B。

ConcreteFactory:具體工廠角色,實現(xiàn)了抽象工廠中定義的創(chuàng)建產(chǎn)品的方法,生成一組具體的產(chǎn)品,每一個產(chǎn)品又位于某個產(chǎn)品等級中。

AbstractProduct:抽象產(chǎn)品角色,定義了每種產(chǎn)品應(yīng)有的方法

ConcreteProduct:具體的產(chǎn)品角色,定義了具體工廠生產(chǎn)的具體產(chǎn)品對象,實現(xiàn)抽象產(chǎn)品中聲明的方法。

四、通用模式代碼

抽象的產(chǎn)品A和B

public abstract class AbstractProductA {

public abstract void method();

}

public abstract class AbstractProductB {

public abstract void method();

}

具體的產(chǎn)品A1,A2,B1,B2

public class ConcreteProductA1 extends AbstractProductA {

@Override

public void method() {

System.out.println("產(chǎn)品A1的方法");

}

}

public class ConcreteProductA2 extends AbstractProductA {

@Override

public void method() {

System.out.println("產(chǎn)品A2的方法");

}

}

public class ConcreteProductB1 extends AbstractProductB {

@Override

public void method() {

System.out.println("產(chǎn)品B1的方法");

}

}

public class ConcreteProductB2 extends AbstractProductB {

@Override

public void method() {

System.out.println("產(chǎn)品B2的方法");

}

}

抽象工廠:

public abstract class AbstractFactory {

public abstract AbstractProductA createProductA();

public abstract AbstractProductB createProductB();

}

具體的工廠1和2

public class ConcreteFactory1 extends AbstractFactory {

@Override

public AbstractProductA createProductA() {

return new ConcreteProductA1();

}

@Override

public AbstractProductB createProductB() {

return new ConcreteProductB1();

}

}

public class ConcreteFactory2 extends AbstractFactory {

@Override

public AbstractProductA createProductA() {

return new ConcreteProductA2();

}

@Override

public AbstractProductB createProductB() {

return new ConcreteProductB2();

}

}

五、簡單實現(xiàn)

上一篇講到,小民開了個Audi車組裝工廠。隨著小民生意越做越大,發(fā)現(xiàn)Q3,Q5,Q7使用的零件各不相同,他們的零件又有差別,Q3的發(fā)動機是國產(chǎn)的,輪胎是鐵的。Q7的發(fā)動機是外國的,輪胎是塑料的。不同的輪胎,不同的發(fā)動機,都也是一種產(chǎn)品類型,這時候就能用抽象產(chǎn)品模式:

首先 汽車工廠需要生產(chǎn)輪胎、發(fā)動機、制動系統(tǒng)這三種部件:

public abstract class CarFactory {

//輪胎

public abstract ITire createTire();

//發(fā)動機

public abstract IEngine createEngine();

//制動系統(tǒng)

public abstract IBrake createBrake(); //返回 制動系統(tǒng) 對象

}

這里我們?yōu)槊恳粋€零件定義一個接口,并分別創(chuàng)建兩個不同的實現(xiàn)類表示不同的零部件產(chǎn)品

public interface ITire {

//輪胎接口

void tire();

}

public class NormalTire implements ITire {

@Override

public void tire() {

System.out.println("普通輪胎");

}

}

public class SUVTire implements ITire {

@Override

public void tire() {

System.out.println("越野輪胎");

}

}

public interface IEngin {

//發(fā)動機

void engine();

}

public class DomesticEngin implements IEngin {

@Override

public void engine() {

System.out.println("國產(chǎn)發(fā)動機");

}

}

public class ImportEngin implements IEngin {

@Override

public void engine() {

System.out.println("進口發(fā)動機");

}

}

public interface IBrake {

//制動系統(tǒng)

void brake();

}

public class NormalBrake implements IBrake {

@Override

public void brake() {

System.out.println("普通制動");

}

}

public class SeniorBrake implements IBrake {

@Override

public void brake() {

System.out.println("高級制動");

}

}

具體的 不同的生產(chǎn) 車廠 Q3 生產(chǎn)廠

public class Q3Factory extends CarFactory {

@Override

public ITire createTire() {

return new NormalTire(); //返回普通的輪胎類

}

@Override

public IEngin createEngine() {

return new DomesticEngin(); //返回國產(chǎn)發(fā)動機

}

@Override

public IBrake createBrake() {

return new NormalBrake(); //返回一般制動

}

}

具體的 不同的生產(chǎn) 車廠 Q7 生產(chǎn)廠

public class Q7Factory extends CarFactory {

@Override

public ITire createTire() {

return new SUVTire(); //返回SUV 車胎

}

@Override

public IEngin createEngine() {

return new ImportEngin(); //返回進口輪胎

}

@Override

public IBrake createBrake() {

return new SeniorBrake(); //返回高級制動

}

}

客戶類 具體的實例化調(diào)用 生產(chǎn)

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//構(gòu)造一個生產(chǎn)Q3 的工廠

CarFactory factoryQ3 = new Q3Factory();

factoryQ3.createTire().tire();

factoryQ3.createEngine().engine();

factoryQ3.createBrake().brake();

//構(gòu)造一個 生產(chǎn)Q7 的 工廠

CarFactory factoryQ7 = new Q7Factory();

factoryQ7.createTire().tire();

factoryQ7.createEngine().engine();

factoryQ7.createBrake().brake();

}

}

結(jié)果如下

9.png

可見當需要添加Q5時,對應(yīng)的零件類又要增加,這是此模式一個弊端,就是類的徒增,如果工廠類過多,勢必導(dǎo)致文件非常多,開發(fā)中一定要權(quán)衡。

五、模式的優(yōu)缺點:

優(yōu)點:

分離接口與實現(xiàn),客戶端使用抽象工廠來創(chuàng)建需要的對象,二客戶端根本不知道具體實現(xiàn)的是誰,客戶端只是面向產(chǎn)品的接口編程而已,使其從具體的產(chǎn)品實現(xiàn)中解耦,同時基于接口與實現(xiàn)的分離,使抽象工廠方法模式在切換產(chǎn)品類時更加靈活,容易。

缺點:

一是文件的爆炸性增加,而是不太容易擴展新的產(chǎn)品類,因為每當我們增加一個產(chǎn)品類就需要修改抽象工廠,那么所以的具體工廠均會被修改。

總結(jié)

以上是生活随笔為你收集整理的android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。