中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

豐金網(wǎng)絡 做網(wǎng)站數(shù)字營銷網(wǎng)站

豐金網(wǎng)絡 做網(wǎng)站,數(shù)字營銷網(wǎng)站,wordpress多媒體,一般網(wǎng)站欄目結構抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創(chuàng)建其他工廠 該超級工廠又稱為其他工廠的工廠 在抽象工廠模式中,接口是負責創(chuàng)建一個相關對象的工廠,不需要顯式指定它們的類 每個生成的工廠都能按照工廠模式提供對象 …

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創(chuàng)建其他工廠 該超級工廠又稱為其他工廠的工廠
在抽象工廠模式中,接口是負責創(chuàng)建一個相關對象的工廠,不需要顯式指定它們的類
每個生成的工廠都能按照工廠模式提供對象
抽象工廠模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。

摘要

1. 意圖

提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類

2. 主要解決

主要解決接口選擇的問題

3. 何時使用

系統(tǒng)的產(chǎn)品有多于一個的產(chǎn)品族,而系統(tǒng)只消費其中某一族的產(chǎn)品

4. 如何解決

在一個產(chǎn)品族里面,定義多個產(chǎn)品

5. 關鍵代碼

在一個工廠里聚合多個同類產(chǎn)品

6. 應用實例

  • 工作了,為了參加一些聚會,肯定有兩套或多套衣服吧,比如說有商務裝(成套,一系列具體產(chǎn)品)、時尚裝(成套,一系列具體產(chǎn)品),甚至對于一個家庭來說,可能有商務女裝、商務男裝、時尚女裝、時尚男裝,這些也都是成套的,即一系列具體產(chǎn)品;
  • 假設一種情況(現(xiàn)實中是不存在的,要不然,沒法進入共產(chǎn)主義了,但有利于說明抽象工廠模式),在您的家中,某一個衣柜(具體工廠)只能存放某一種這樣的衣服(成套,一系列具體產(chǎn)品),每次拿這種成套的衣服時也自然要從這個衣柜中取出了;
  • 用OO 的思想去理解,所有的衣柜(具體工廠)都是衣柜類的(抽象工廠)某一個,而每一件成套的衣服又包括具體的上衣(某一具體產(chǎn)品),褲子(某一具體產(chǎn)品),這些具體的上衣其實也都是上衣(抽象產(chǎn)品),具體的褲子也都是褲子(另一個抽象產(chǎn)品);

7. 優(yōu)點

  • 隔離產(chǎn)品代碼:抽象工廠模式允許應用層與具體產(chǎn)品的創(chuàng)建細節(jié)相隔離,客戶端不需要關心產(chǎn)品是如何創(chuàng)建的,只需要通過工廠接口來獲取所需的產(chǎn)品。
  • 創(chuàng)建產(chǎn)品族:這種模式適用于創(chuàng)建一個產(chǎn)品系列或者一個產(chǎn)品家族。當需要一系列相關的對象時,抽象工廠能夠提供一個統(tǒng)一的接口來創(chuàng)建它們,這樣可以輕松擴展和維護。
  • 約束產(chǎn)品族:抽象工廠模式可以在類的內(nèi)部對產(chǎn)品族進行約束,確保只有屬于同一個產(chǎn)品族的對象被一起使用。這有助于保持產(chǎn)品族的一致性和兼容性。
  • 靈活性:當工廠的變化發(fā)生時,使用抽象工廠模式可以確保不需要修改客戶端使用工廠的代碼,這樣可以提高系統(tǒng)的靈活性和可維護性。
  • 一致性:保證客戶端始終只使用同一個產(chǎn)品族中的對象,有助于保持系統(tǒng)的整體風格和行為的一致性

8. 缺點

  • 產(chǎn)品族擴展非常困難,要增加一個系列的某一產(chǎn)品,既要在抽象的 Creator(創(chuàng)造者) 里加代碼,又要在具體的里面加代碼

9. 使用場景

  • QQ換皮膚,一整套一起換;
  • 生成不同操作系統(tǒng)的程序;

10. 注意事項

  • 產(chǎn)品族難擴展,產(chǎn)品等級易擴展

實現(xiàn)

在這里插入圖片描述

  1. 創(chuàng)建Shape和Color接口和實現(xiàn)這些接口的實體類;
  2. 創(chuàng)建抽象工廠類AbstractFactory
  3. 定義工廠類ShapeFactoryColorFactory,這兩個工廠類都是擴展了AbstractFactory
  4. 創(chuàng)建一個工廠創(chuàng)造器/生成器類FactoryProducer
  5. AbstractFactoryPatternDemo使用FactoryProducer來獲取AbstractFactory對象;
    • 它將向AbstractFactory 傳遞形狀信息 Shape ( CIRCLE / RECTANGLE / SQUARE ),以便獲取它所需對象的類型
    • 同時它還向 AbstractFactory 傳遞顏色信息 Color ( RED / GREEN / BLUE ),以便獲取它所需對象的類型

范例

1. 為形狀創(chuàng)建一個接口.

Shape.java

public interface Shape {void draw();
}

2. 創(chuàng)建實現(xiàn)接口的實體類

Rectangle.java

package com.demo.gof;
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Inside Rectangle::draw() method.");}
}

Square.java

package com.demo.gof;
public class Square implements Shape {@Overridepublic void draw() {System.out.println("Inside Square::draw() method.");}
}

Circle.java

package com.demo.gof;
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Inside Circle::draw() method.");}
}

3. 為顏色創(chuàng)建一個接口

Color.java

package com.demo.gof;
public interface Color {void fill();
}

4. 創(chuàng)建實現(xiàn)顏色接口的實體類

Red.java

package com.demo.gof;
public class Red implements Color {@Overridepublic void fill() {System.out.println("Inside Red::fill() method.");}
}

Green.java

package com.demo.gof;
public class Green implements Color {@Overridepublic void fill() {System.out.println("Inside Green::fill() method.");}
}

Blue.java

package com.demo.gof;
public class Blue implements Color {@Overridepublic void fill() {System.out.println("Inside Blue::fill() method.");}
}

5. 為 Color 和 Shape 對象創(chuàng)建抽象類來獲取工廠

AbstractFactory.java

package com.demo.gof;
public abstract class AbstractFactory {abstract Color getColor(String color);abstract Shape getShape(String shape) ;
}

6. 創(chuàng)建擴展了 AbstractFactory 的工廠類,基于給定的信息生成實體類的對象

ShapeFactory.java

package com.demo.gof;
public class ShapeFactory extends AbstractFactory {@Overridepublic Shape getShape(String shapeType){if(shapeType == null){return null;}     if(shapeType.equalsIgnoreCase("CIRCLE")){return new Circle();} else if(shapeType.equalsIgnoreCase("RECTANGLE")){return new Rectangle();} else if(shapeType.equalsIgnoreCase("SQUARE")){return new Square();}return null;}@OverrideColor getColor(String color) {return null;}
}

ColorFactory.java

package com.demo.gof;
public class ColorFactory extends AbstractFactory {@Overridepublic Shape getShape(String shapeType){return null;}@OverrideColor getColor(String color) {if(color == null){return null;}     if(color.equalsIgnoreCase("RED")){return new Red();} else if(color.equalsIgnoreCase("GREEN")){return new Green();} else if(color.equalsIgnoreCase("BLUE")){return new Blue();}return null;}
}

7. 創(chuàng)建一個工廠創(chuàng)造器/生成器類,通過傳遞形狀或顏色信息來獲取工廠

FactoryProducer.java

package com.demo.gof;
public class FactoryProducer {public static AbstractFactory getFactory(String choice){if(choice.equalsIgnoreCase("SHAPE")){return new ShapeFactory();} else if(choice.equalsIgnoreCase("COLOR")){return new ColorFactory();}return null;}
}

8. 使用 FactoryProducer 來獲取 AbstractFactory,通過傳遞類型信息來獲取實體類的對象

AbstractFactoryPatternDemo.java

package com.demo.gof;
public class AbstractFactoryPatternDemo {public static void main(String[] args) {//獲取形狀工廠AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");//獲取形狀為 Circle 的對象Shape shape1 = shapeFactory.getShape("CIRCLE");//調(diào)用 Circle 的 draw 方法shape1.draw();//獲取形狀為 Rectangle 的對象Shape shape2 = shapeFactory.getShape("RECTANGLE");//調(diào)用 Rectangle 的 draw 方法shape2.draw();//獲取形狀為 Square 的對象Shape shape3 = shapeFactory.getShape("SQUARE");//調(diào)用 Square 的 draw 方法shape3.draw();//獲取顏色工廠AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");//獲取顏色為 Red 的對象Color color1 = colorFactory.getColor("RED");//調(diào)用 Red 的 fill 方法color1.fill();//獲取顏色為 Green 的對象Color color2 = colorFactory.getColor("Green");//調(diào)用 Green 的 fill 方法color2.fill();//獲取顏色為 Blue 的對象Color color3 = colorFactory.getColor("BLUE");//調(diào)用 Blue 的 fill 方法color3.fill();}
}

編譯運行以上 Java 范例,輸出結果如下

$ javac -d . src/main/com.demo/gof/AbstractFactoryPatternDemo.java
$ java  com.demo.gof.AbstractFactoryPatternDemo
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.
Inside Red::fill() method.
Inside Green::fill() method.
Inside Blue::fill() method.
http://www.risenshineclean.com/news/48834.html

相關文章:

  • 怎么做培訓班網(wǎng)站石家莊關鍵詞優(yōu)化軟件
  • 什么是網(wǎng)絡營銷包含哪些內(nèi)容全網(wǎng)營銷與seo
  • 清理網(wǎng)站數(shù)據(jù)庫源碼交易平臺
  • 南昌那個公司做網(wǎng)站好今日最新國際新聞頭條
  • 金昌網(wǎng)站seo合肥seo推廣培訓班
  • 蘇州專業(yè)做網(wǎng)站公司有哪些小說推廣關鍵詞怎么弄
  • 做網(wǎng)站需要的照片網(wǎng)站建設公司哪個好呀
  • 建站公司 萬維科技外鏈交換平臺
  • 網(wǎng)站設置密碼百度網(wǎng)站域名注冊
  • 給企業(yè)做宣傳網(wǎng)站的好處百度上如何發(fā)廣告
  • 開發(fā)平臺游戲名詞解釋搜索引擎優(yōu)化
  • 貴陽疫情最新消息今天寧波seo排名優(yōu)化培訓
  • 網(wǎng)站建設公司信息搜索引擎營銷的優(yōu)勢和劣勢
  • 織夢的手機端網(wǎng)站模板技能培訓有哪些科目
  • 破解版下載大全免費下載seo優(yōu)化軟件有哪些
  • 湛江免費建站哪里有淘寶聯(lián)盟怎么推廣
  • 鄭州網(wǎng)站開發(fā)設計公司電話個人如何優(yōu)化網(wǎng)站有哪些方法
  • 如何建立網(wǎng)站做微商企業(yè)網(wǎng)站模板 免費
  • 多語種網(wǎng)站建設手機版怎么用百度快照
  • 馬鞍山住房和城鄉(xiāng)建設局網(wǎng)站免費發(fā)帖論壇大全
  • 國內(nèi)ip地址代理免費信息流優(yōu)化師簡歷怎么寫
  • 建立網(wǎng)站站點的步驟技術培訓平臺
  • 做電影網(wǎng)站服務器需求seo導航站
  • 給網(wǎng)站做接口企業(yè)培訓考試系統(tǒng)
  • 廬江有做網(wǎng)站的嗎財經(jīng)新聞每日財經(jīng)報道
  • 連江網(wǎng)站建設服務index百度指數(shù)
  • 高德地圖有外資背景嗎優(yōu)化大師官方
  • 煙臺網(wǎng)站建設.comseo自然搜索優(yōu)化排名
  • 網(wǎng)站域名過期怎么做重慶網(wǎng)站快速排名提升
  • 大上海小程序開發(fā)搜索引擎優(yōu)化的主題