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. 黑猫贪吃咸鱼!  
  • 相关阅读:
    .net Core 使用AutoMapper
    文件批量生成IO流读写
    .net Core数据的幕等性
    .net core 拦截器的使用
    墙上你APP设计与实现
    H5 App实现热更新,不需要重新安装app
    支付宝支付接口的使用详细说明
    .net 数据源DataSet 转换成模型
    .net ajax跨域请求问题
    【系统之音】SystemUI篇(二)SysytemUI功能一览--草稿
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471575.html
Copyright © 2011-2022 走看看