android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式
一、介紹,定義
抽象工廠模式也是創建型模式之一,抽象工廠模式起源于對不同操作系統的圖形化解決方案,如不同操作系統的按鈕和文本框控件及其實現。
為創建一組相關或者相互依賴的對象提供接口,而不需要具體指定他們的具體類。
二、使用場景
一個對象族有相同的約束時可以使用抽象工廠模式。(比如Android、IOS、Windows Phone下都有短信和撥號軟件)
三、UML類圖
8.png
AbstractFactory:抽象工廠角色,聲明了一組用于創建一種產品的方法,每個方法對應生產一種產品,上面生成產品A和B。
ConcreteFactory:具體工廠角色,實現了抽象工廠中定義的創建產品的方法,生成一組具體的產品,每一個產品又位于某個產品等級中。
AbstractProduct:抽象產品角色,定義了每種產品應有的方法
ConcreteProduct:具體的產品角色,定義了具體工廠生產的具體產品對象,實現抽象產品中聲明的方法。
四、通用模式代碼
抽象的產品A和B
public abstract class AbstractProductA {
public abstract void method();
}
public abstract class AbstractProductB {
public abstract void method();
}
具體的產品A1,A2,B1,B2
public class ConcreteProductA1 extends AbstractProductA {
@Override
public void method() {
System.out.println("產品A1的方法");
}
}
public class ConcreteProductA2 extends AbstractProductA {
@Override
public void method() {
System.out.println("產品A2的方法");
}
}
public class ConcreteProductB1 extends AbstractProductB {
@Override
public void method() {
System.out.println("產品B1的方法");
}
}
public class ConcreteProductB2 extends AbstractProductB {
@Override
public void method() {
System.out.println("產品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();
}
}
五、簡單實現
上一篇講到,小民開了個Audi車組裝工廠。隨著小民生意越做越大,發現Q3,Q5,Q7使用的零件各不相同,他們的零件又有差別,Q3的發動機是國產的,輪胎是鐵的。Q7的發動機是外國的,輪胎是塑料的。不同的輪胎,不同的發動機,都也是一種產品類型,這時候就能用抽象產品模式:
首先 汽車工廠需要生產輪胎、發動機、制動系統這三種部件:
public abstract class CarFactory {
//輪胎
public abstract ITire createTire();
//發動機
public abstract IEngine createEngine();
//制動系統
public abstract IBrake createBrake(); //返回 制動系統 對象
}
這里我們為每一個零件定義一個接口,并分別創建兩個不同的實現類表示不同的零部件產品
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 {
//發動機
void engine();
}
public class DomesticEngin implements IEngin {
@Override
public void engine() {
System.out.println("國產發動機");
}
}
public class ImportEngin implements IEngin {
@Override
public void engine() {
System.out.println("進口發動機");
}
}
public interface IBrake {
//制動系統
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("高級制動");
}
}
具體的 不同的生產 車廠 Q3 生產廠
public class Q3Factory extends CarFactory {
@Override
public ITire createTire() {
return new NormalTire(); //返回普通的輪胎類
}
@Override
public IEngin createEngine() {
return new DomesticEngin(); //返回國產發動機
}
@Override
public IBrake createBrake() {
return new NormalBrake(); //返回一般制動
}
}
具體的 不同的生產 車廠 Q7 生產廠
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(); //返回高級制動
}
}
客戶類 具體的實例化調用 生產
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//構造一個生產Q3 的工廠
CarFactory factoryQ3 = new Q3Factory();
factoryQ3.createTire().tire();
factoryQ3.createEngine().engine();
factoryQ3.createBrake().brake();
//構造一個 生產Q7 的 工廠
CarFactory factoryQ7 = new Q7Factory();
factoryQ7.createTire().tire();
factoryQ7.createEngine().engine();
factoryQ7.createBrake().brake();
}
}
結果如下
9.png
可見當需要添加Q5時,對應的零件類又要增加,這是此模式一個弊端,就是類的徒增,如果工廠類過多,勢必導致文件非常多,開發中一定要權衡。
五、模式的優缺點:
優點:
分離接口與實現,客戶端使用抽象工廠來創建需要的對象,二客戶端根本不知道具體實現的是誰,客戶端只是面向產品的接口編程而已,使其從具體的產品實現中解耦,同時基于接口與實現的分離,使抽象工廠方法模式在切換產品類時更加靈活,容易。
缺點:
一是文件的爆炸性增加,而是不太容易擴展新的產品類,因為每當我們增加一個產品類就需要修改抽象工廠,那么所以的具體工廠均會被修改。
總結
以上是生活随笔為你收集整理的android 工厂模式创建,7、Android设计模式---(创建型设计模式)抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux启动tomcat命令行关闭后服
- 下一篇: android寻找手机,寻找那些“干净”