zoukankan      html  css  js  c++  java
  • 创建型模式抽象工厂

    1.1.2抽象工厂


    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

     适用性

     
        1.一个系统要独立于它的产品的创建、组合和表示时。
     
        2.一个系统要由多个产品系列中的一个来配置时。
     
        3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
     
        4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
                           

     参与者

     
        1.AbstractFactory
          声明一个创建抽象产品对象的操作接口。
     
        2.ConcreteFactory
          实现创建具体产品对象的操作。
     
        3.AbstractProduct
          为一类产品对象声明一个接口。
     
        4.ConcreteProduct
          定义一个将被相应的具体工厂创建的产品对象。
          实现AbstractProduct接口。
     
        5.Client
          仅使用由AbstractFactory和AbstractProduct类声明的接口

     类图

     例子

    AbstractFactory

    public interface IAnimalFactory {
         ICat createCat();
         IDog createDog();
    }
     

    ConcreteFactory

    public class BlackAnimalFactory implements IAnimalFactory {
         public ICat createCat() {
            return new BlackCat();
        }
         public IDog createDog() {
            return new BlackDog();
        }
     }
     public class WhiteAnimalFactory implements IAnimalFactory {
         public ICat createCat() {
            return new WhiteCat();
        }
         public IDog createDog() {
            return new WhiteDog();
        }
     }
     

    AbstractProduct

    public interface ICat {
         void eat();
    }
     public interface IDog {
         void eat();
    }
     

    ConcreteProduct

    public class BlackCat implements ICat {
         public void eat() {
            System.out.println("The black cat is eating!");
        }
     }
     public class WhiteCat implements ICat {
         public void eat() {
            System.out.println("The white cat is eating!");
        }
     }
     public class BlackDog implements IDog {
         public void eat() {
            System.out.println("The black dog is eating");
        }
     }
     public class WhiteDog implements IDog {
         public void eat() {
            System.out.println("The white dog is eating!");
        }
     }
     

    Client

    public static void main(String[] args) {
        IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
        ICat blackCat = blackAnimalFactory.createCat();    
        blackCat.eat(); IDog blackDog
    = blackAnimalFactory.createDog();
        blackDog.eat();
    IAnimalFactory whiteAnimalFactory
    = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat();
        whiteCat.eat(); IDog whiteDog
    = whiteAnimalFactory.createDog();
        whiteDog.eat(); }
     

    result

     
    The black cat is eating!
    The black dog is eating!
    The white cat is eating!
    The white dog is eating!
  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/aloe/p/2650452.html
Copyright © 2011-2022 走看看