• 23种设计模式----------抽象工厂模式


    抽象工厂模式:

    在上一篇中讲到通过各个具体球类(如:足球,篮球等)来继承总球类(Ball),来实现通过BallFactory对具体球类的生产.

    不过,当时只是能造出不同球类,而在每种球类中肯定也有颜色,大小等不同的属性.所以,为了实现在工厂中添加属性.将抽象的Ball球类,修改成Bll接口,在该接口中添加所需要的方法:

    这种模式是抽象工厂模式,抽象工厂模式是抽象方法模式的升级.在有多个业务品种,业务分级时,采用抽象工厂模式生产需要的对象是一种非常好的解决房还是.(比如,在生产球类的时候,不仅要分球的种类,也要分球的颜色等....)

    即:

    1 //球接口
    2 public interface Ball {
    3     
    4     void getBallKind();
    5     
    6     void getBallColor();
    7 }

    然后让之前具体球类实现该Ball这个接口

     1 //篮球实现Ball
     2 public abstract class Basketball implements Ball{
     3     public void getBallKind(){
     4         System.out.println("我是篮球!!!");
     5     }
     6 }
     7 
     8 
     9 //足球实现Ball
    10 public abstract class Football {
    11     public void getBallKind(){
    12         System.out.println("我是足球!!!");
    13     }
    14 }

    这样,就能对球的种类进行不同的生产了.接下来就是给同种球类涂上不同的颜料了.

     1 //给篮球涂色
     2 public class BlackBasketball extends Basketball{
     3 
     4     public void getBallColor() {
     5         System.out.println("我是黑色篮球");
     6     }
     7 
     8 }
     9 
    10 public class RedBasketball extends Basketball{
    11 
    12     public void getBallColor() {
    13         System.out.println("我是红色篮球");
    14     }
    15 
    16 }
    17 
    18 //给足球涂色
    19 public class BlackFootball extends Football{
    20 
    21     public void getBallColor() {
    22         System.out.println("我是黑色足球!!!");
    23     }
    24 }
    25 
    26 public class RedFootball extends Football{
    27 
    28     public void getBallColor() {
    29         System.out.println("我是红色足球!!!");
    30     }
    31 }

    每个品种的球类定义好了,然后就是定义生产各个球类的工厂了.

     1 //红球工厂类
     2 public class RedBallFactory implements BallFactory{
     3 
     4     public Ball createBasketball() {
     5         return new RedBasketball();
     6     }
     7 
     8     public Ball createFootBall() {
     9         return new RedFootball();
    10     }
    11 }
    12 //黑球工厂类
    13 public class BlackFactory implements BallFactory{
    14 
    15     public Ball createBasketball() {
    16         return new BlackBasketball();
    17     }
    18 
    19     public Ball createFootBall() {
    20         return new BlackFootball();
    21     }
    22 }

    抽象工厂模式的扩展性一般。

  • 相关阅读:
    Linux centos 安装 Node.js
    maven 常用命令
    linux centos 设置笔记本合盖不待机
    linux centos 网卡有关调试
    Linux centos 安装 maven 3.5.4
    Linux centos 安装 jenkins & 本地构建jar & 远程构建jar
    Linux centos 安装 tomcat 7
    Linux centos 安装 JDK 8
    JS正则 replace()方法全局替换变量(可以对变量进行全文替换)
    node:json与csv互转
  • 原文地址:https://www.cnblogs.com/yemaozistar/p/4140366.html
Copyright © 2020-2023  润新知