zoukankan      html  css  js  c++  java
  • GoF23种设计模式之创建型模式之抽象工厂模式

    一、概述

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

    二、适用性

    1.一个系统要独立于它的产品的创建、组合和表示的时候。

    2.一个系统要由多个产品系列中的一个来配置的时候。

    3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候。

    4.当你提供一个产品类库,而只想显示它们的接口而不是实现的时候。

    三、参与者

    1.AbstractFactory:声明一个创建抽象产品对象的操作接口。

    2.ConcreteFactory:实现创建具体产品对象的操作。

    3.AbstractProduct:为一类产品对象声明一个接口。

    4.ConcreteProduct:定义一个将被相应地具体工程创建的产品对象。实现AbstractProduct接口。

    5.Client:仅使用由AbstractFactory和AbstractProduct类声明的接口。

    四、类图

    五、示例

    AbstractFactory

    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public interface IAnimalFactory {  
    4.   
    5.     public IMouse createMouse();  
    6.   
    7.     public ICat createCat();  
    8.   
    9. }  

    ConcreteFactory

    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class WhiteAnimalFactory implements IAnimalFactory {  
    4.   
    5.     @Override  
    6.     public IMouse createMouse() {  
    7.         return new WhiteMouse();  
    8.     }  
    9.   
    10.     @Override  
    11.     public ICat createCat() {  
    12.         return new WhiteCat();  
    13.     }  
    14.   
    15. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class BlackAnimalFactory implements IAnimalFactory {  
    4.   
    5.     @Override  
    6.     public IMouse createMouse() {  
    7.         return new BlackMouse();  
    8.     }  
    9.   
    10.     @Override  
    11.     public ICat createCat() {  
    12.         return new BlackCat();  
    13.     }  
    14.   
    15. }  

    AbstractProduct

    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public interface IMouse {  
    4.   
    5.     public void eat();  
    6.   
    7. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public interface ICat {  
    4.   
    5.     public void eat();  
    6.   
    7. }  

    ConcreteProduct

    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class WhiteMouse implements IMouse {  
    4.   
    5.     @Override  
    6.     public void eat() {  
    7.         System.out.println("白老鼠偷吃花生!");  
    8.     }  
    9.   
    10. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class BlackMouse implements IMouse {  
    4.   
    5.     @Override  
    6.     public void eat() {  
    7.         System.out.println("黑老鼠偷吃花生!");  
    8.     }  
    9.   
    10. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class WhiteCat implements ICat {  
    4.   
    5.     @Override  
    6.     public void eat() {  
    7.         System.out.println("白猫贪吃咸鱼!");  
    8.     }  
    9.   
    10. }  
    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class BlackCat implements ICat {  
    4.   
    5.     @Override  
    6.     public void eat() {  
    7.         System.out.println("黑猫贪吃咸鱼!");  
    8.     }  
    9.   
    10. }  

    Client

    [java] view plain copy
     
     print?
    1. package cn.lynn.abstractfactory;  
    2.   
    3. public class Client {  
    4.   
    5.     public static void main(String[] args) {  
    6.         IAnimalFactory whiteAnimalfactory = new WhiteAnimalFactory();  
    7.         IMouse whiteMouse = whiteAnimalfactory.createMouse();  
    8.         whiteMouse.eat();  
    9.         ICat whiteCat = whiteAnimalfactory.createCat();  
    10.         whiteCat.eat();  
    11.           
    12.         IAnimalFactory blackAnimalfactory = new BlackAnimalFactory();  
    13.         IMouse blackMouse = blackAnimalfactory.createMouse();  
    14.         blackMouse.eat();  
    15.         ICat blackCat = blackAnimalfactory.createCat();  
    16.         blackCat.eat();  
    17.     }  
    18.   
    19. }  

    Result

    [java] view plain copy
     
     print?
      1. 白老鼠偷吃花生!  
      2. 白猫贪吃咸鱼!  
      3. 黑老鼠偷吃花生!  
      4. 黑猫贪吃咸鱼!  
  • 相关阅读:
    Java 注解指导手册(下)
    CentOS安装Redis Sentinel HA集群
    EasyBCD安装CentOS双系统
    读《大型网站技术架构核心原理与案例分析》
    CentOS的Redis内存分配策略配置
    CentOS搭建VSFTP
    freemaker分页备忘
    jenkins持续集成配置备忘
    Redis常用命令
    stream转byte数组几种方式
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471575.html
Copyright © 2011-2022 走看看