<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **定義**:為創建一組相關或相互依賴的對象提供一個接口,而且無須指定他們的具體類。 我的理解:抽象工廠模式是工廠模式的升級,它針對多個業務品種,業務分類時通過抽象工廠模式來解決。 就好比工廠中的流水線工作一樣。 **一個例子**: 還是繼續女媧造人的故事,女媧在制造出白人、黑人、黃種人之后,又想創造出男人和女人。那么如何來解決這個需求呢? **解決方案**: 1、定義一個接口Human,提供getSkin(),talk(),getSex()方法。 2、使用抽象類繼承自Human,分別實現不同膚色人的共有方法。 3、各種膚色的人擁有男性和女性類。 4、定義一個創建工廠接口,創建男性和女性工廠的類來實現不同種類的男性和女性的創建 工廠模式只要你知道創建工廠的類及方法,就能創造出一個與之無關的其他類,而不必去管它具體是怎么創建出來的。 ![](https://box.kancloud.cn/2016-06-06_5755340883c9d.jpg) ~~~ public class HumanTest { public static void main(String[] args) { System.out.println("--------女性工廠-------------------"); FemaleYellowHuman femaleYellow = (FemaleYellowHuman) new FemaleFactory().createYellowHuman(); femaleYellow.getSex(); femaleYellow.getSkin(); femaleYellow.talk(); System.out.println("--------男性工廠---------------"); MaleYellowHuman maleYellow = (MaleYellowHuman) new MaleFactory().createYellowHuman(); maleYellow.getSex(); maleYellow.getSkin(); maleYellow.talk(); } } interface Human{ //獲取膚色 void getSkin(); //說話語言 void talk(); //性別 void getSex(); } abstract class AbstractBlack implements Human{ public void getSkin(){ System.out.println("我是黑人,擁有黑色的皮膚..."); } @Override public void talk() { System.out.println("我是黑人,說的是非洲語..."); } } abstract class AbstractYellow implements Human{ public void getSkin(){ System.out.println("我是黃種人,擁有黃色的皮膚..."); } @Override public void talk() { System.out.println("我是黃種人,說的是漢語..."); } } abstract class AbstractWhite implements Human{ public void getSkin(){ System.out.println("我是白種人,擁有白色的皮膚..."); } @Override public void talk() { System.out.println("我是白種人,說的是英語..."); } } class FemaleBlackHuman extends AbstractBlack{ @Override public void getSex() { System.out.println("我是非洲女人..."); } } class MaleBlackHuman extends AbstractBlack{ @Override public void getSex() { System.out.println("我是非洲男人..."); } } class FemaleYellowHuman extends AbstractYellow{ @Override public void getSex() { System.out.println("我是中國女人..."); } } class MaleYellowHuman extends AbstractYellow{ @Override public void getSex() { System.out.println("我是中國男人..."); } } class FemaleWhiteHuman extends AbstractWhite{ @Override public void getSex() { System.out.println("我是美國女人..."); } } class MaleWhiteHuman extends AbstractWhite{ @Override public void getSex() { System.out.println("我是美國男人..."); } } interface HumanFactory{ //創建黑人 Human createBlackHuman(); //創建黃種人 Human createYellowHuman(); //創建白人 Human createWhiteHuman(); } class FemaleFactory implements HumanFactory{ @Override public Human createBlackHuman() { // TODO Auto-generated method stub return new FemaleBlackHuman(); } @Override public Human createYellowHuman() { // TODO Auto-generated method stub return new FemaleYellowHuman(); } @Override public Human createWhiteHuman() { // TODO Auto-generated method stub return new FemaleWhiteHuman(); } } class MaleFactory implements HumanFactory{ @Override public Human createBlackHuman() { // TODO Auto-generated method stub return new MaleBlackHuman(); } @Override public Human createYellowHuman() { // TODO Auto-generated method stub return new MaleYellowHuman(); } @Override public Human createWhiteHuman() { // TODO Auto-generated method stub return new MaleWhiteHuman(); } } ~~~ **抽象類的通用模式**; UML類圖: ![](https://box.kancloud.cn/2016-06-06_57553408a03ce.jpg) 說明:抽象工廠模式具有很好的封裝性,它的一般模式是:一個接口,多個抽象類,N個實現類。 他的產品族擴展比較困難,但是產品的等級易擴展。 ~~~ public class AbstractFactoryTest { public static void main(String[] args) { System.out.println("---------等級1,的A,B兩個產品-------------"); IProduct c1 = new Creator1(); ProductA1 pa1 = (ProductA1) c1.createA(); ProductB1 pb1 = (ProductB1) c1.createB(); pa1.Method(); pb1.Method(); System.out.println("---------等級2,的A,B兩個產品-------------"); IProduct c2 = new Creator2(); ProductA2 pa2 = (ProductA2) c2.createA(); ProductB2 pb2 = (ProductB2) c2.createB(); pa2.Method(); pb2.Method(); } } interface IProduct{ AbstractProductA createA(); AbstractProductB createB(); } abstract class AbstractProductA{ public void shareMethod(){ System.out.println("生產產品所共有的方法...."); } //生產產品不同的方法 public abstract void Method(); } abstract class AbstractProductB{ public void shareMethod(){ System.out.println("生產產品所共有的方法...."); } //生產產品不同的方法 public abstract void Method(); } class ProductA1 extends AbstractProductA{ @Override public void Method() { System.out.println("生產產品---A1---的方法 ...."); } } class ProductB1 extends AbstractProductB{ @Override public void Method() { System.out.println("生產產品---B1---的方法 ...."); } } class ProductA2 extends AbstractProductA{ @Override public void Method() { System.out.println("生產產品---A2---的方法 ...."); } } class ProductB2 extends AbstractProductB{ @Override public void Method() { System.out.println("生產產品---B2---的方法 ...."); } } class Creator1 implements IProduct{ //生產等級1產品A @Override public AbstractProductA createA() { // TODO Auto-generated method stub return new ProductA1(); } //生產等級1產品B @Override public AbstractProductB createB() { // TODO Auto-generated method stub return new ProductB1(); } } class Creator2 implements IProduct{ //生產等級1產品A @Override public AbstractProductA createA() { // TODO Auto-generated method stub return new ProductA2(); } //生產等級1產品B @Override public AbstractProductB createB() { // TODO Auto-generated method stub return new ProductB2(); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看