zoukankan      html  css  js  c++  java
  • 03抽象工厂模式AbstractFactory

    一、什么是抽象工厂模式

      抽象工厂模式是所有形态的工厂模式中最为抽 象和最其一般性的。抽象工厂模式可以向客户端 提供一个接口,使得客户端在不必指定产品的具 体类型的情况下,能够创建多个产品族的产品对 象。

    二、产品族和产品等级结构

    三、模式中包含的角色及其职责

      1.抽象工厂(Creator)角色 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

      2.具体工厂( Concrete Creator)角色 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

       3.抽象(Product)角色 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

      4.具体产品(Concrete Product)角色 抽象模式所创建的具体实例对象 总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

    抽象苹果  实现水果

    1 public abstract class Apple implements Fruit{
    2     /*
    3      * 采集
    4      */
    5     public abstract void get();
    6 }

    抽象香蕉  实现水果

    1 public abstract class Banana implements Fruit{
    2     /*
    3      * 采集
    4      */
    5     public abstract void get();
    6 }

    水果接口

    1 public interface Fruit {
    2     /*
    3      * 采集
    4      */
    5     public void get();
    6 }

    水果工厂接口

    1 public interface FruitFactory {
    2     //实例化Apple
    3     public Fruit getApple();
    4     //实例化Banana
    5     public Fruit getBanana();
    6 }

    北方苹果  继承苹果

    1 public class NorthApple extends Apple {
    2 
    3     public void get() {
    4         System.out.println("采集北方苹果");
    5     }
    6 }

    北方香蕉  继承香蕉

    1 public class NorthBanana extends Banana {
    2 
    3     public void get() {
    4         System.out.println("采集北方香蕉");
    5     }
    6 }

    北方水果工厂  实现水果工厂

     1 public class NorthFruitFactory implements FruitFactory {
     2 
     3     public Fruit getApple() {
     4         return new NorthApple();
     5     }
     6 
     7     public Fruit getBanana() {
     8         return new NorthBanana();
     9     }
    10 }

    南方苹果  继承苹果

    1 public class SouthApple extends Apple {
    2 
    3     public void get() {
    4         System.out.println("采集南方苹果");
    5     }
    6 }

    南方香蕉  继承香蕉

    1 public class SouthBanana extends Banana {
    2 
    3     public void get() {
    4         System.out.println("采集南方香蕉");
    5     }
    6 }

    南方水果工厂  实现水果工厂

     1 public class SouthFruitFactory implements FruitFactory {
     2 
     3     public Fruit getApple() {
     4         return new SouthApple();
     5     }
     6 
     7     public Fruit getBanana() {
     8         return new SouthBanana();
     9     }
    10 }

    温室苹果  继承苹果

    1 public class WenshiApple extends Apple {
    2 
    3     public void get() {
    4         System.out.println("采集温室苹果");
    5     }
    6 }

    温室香蕉  继承香蕉

    1 public class WenshiBanana extends Banana {
    2 
    3     public void get() {
    4         System.out.println("采集温室香蕉");
    5     }
    6 }

    温室水果工厂  实现水果工厂

     1 public class WenshiFruitFactory implements FruitFactory {
     2 
     3     public Fruit getApple() {
     4         return new WenshiApple();
     5     }
     6 
     7     public Fruit getBanana() {
     8         return new WenshiBanana();
     9     }
    10 }
  • 相关阅读:
    [bbk4999] 第100集 第12章 数据移植 06
    [bbk4992] 第98集 第12章 数据移植 04
    [bbk0000] 第101集 第12章 数据移植 08 本章案例 > 使用ORACLE_DATAPUMP擎创建外部表
    PL/SQL
    [zz]Python:time.clock() vs. time.time()
    MVC简介
    ajax_get/post_两级联动
    Ajax
    JAVAUML
    类与接口的区别
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9031725.html
Copyright © 2011-2022 走看看