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!
  • 相关阅读:
    POJ2524+并查集
    POJ3697+BFS+hash存边
    POJ1151+线段树+扫描线
    POJ2528+线段树
    ubuntu 和 win7 远程登陆 + vnc登陆
    POJ3690+位运算
    POJ3283+字典树
    POJ3282+模拟
    POJ2349+prim
    2016.6.13
  • 原文地址:https://www.cnblogs.com/aloe/p/2650452.html
Copyright © 2011-2022 走看看