zoukankan      html  css  js  c++  java
  • 抽象工厂模式(五)

    一、定义与特点

    为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

    工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。

    使用抽象工厂模式一般要满足以下条件:

    • 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。
    • 系统一次只可能消费其中某一族产品,即同族的产品一起使用。

    二、模式的结构与实现

    1. 模式的结构

    抽象工厂模式也就是不仅生产鼠标,同时生产键盘。 
    也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。 
    戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。 
    创建工厂时,由戴尔工厂创建。 
    后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

    2. 模式的实现

     (1) 抽象工厂

    public abstract class PcFactory {
        public abstract Mouse createMouse();
        public abstract Keybo createKeybo();
    }

    (2) 抽象产品

    //鼠标
    public abstract class Mouse {
        public abstract void sayHi();
    }
    
    //键盘
    public abstract class Keybo {
        public abstract void sayHi();
    }

    (3) 具体产品

    //惠普鼠标
    public class HpMouse extends Mouse{
    
        @Override
        public void sayHi() {
            System.out.println("HpMouse");
        }
    
    }
    
    //惠普键盘
    public class HpKeybo extends Keybo{
    
        @Override
        public void sayHi() {
            System.out.println("HpKeybo");
        }
    
    }
    //戴尔鼠标
    public class DellMouse extends Mouse{
    
        @Override
        public void sayHi() {
            System.out.println("DellMouse");
        }
    }
    
    //戴尔键盘
    public class DellKeybo extends Keybo{
    
        @Override
        public void sayHi() {
            System.out.println("DellKeybo");
        }
    
    }

    (4) 具体工厂

    //惠普工厂
    public class HpFactory extends PcFactory{
    
        @Override
        public Mouse createMouse() {
            return new HpMouse();
        }
    
        @Override
        public Keybo createKeybo() {
            return new HpKeybo();
        }
    
    }
    //戴尔工厂
    public class DellFactory extends PcFactory{
    
        @Override
        public Mouse createMouse() {
            return new DellMouse();
        }
    
        @Override
        public Keybo createKeybo() {
            return new DellKeybo();
        }
    
    }

    三、模式的优缺点

    抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下。

    • 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
    • 当增加一个新的产品族时不需要修改原代码,满足开闭原则。

    其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。

  • 相关阅读:
    Android 监听键盘弹出/隐藏
    js 监听事件的叠加和移除
    如何用 Swift 语言构建一个自定控件
    适用于Web开发人员的20个CSS调色板
    学习Flutter应用开发有用的代码/库/专有技术列表
    学习Java的书籍资料
    可能对Flutter应用程序开发有用的代码/库/专有技术列表
    ios 动画:底部标签栏的概念设计
    iOS 开发者必不可少的 75 个工具
    创建Android Apps的30个经验教训
  • 原文地址:https://www.cnblogs.com/myitnews/p/11426811.html
Copyright © 2011-2022 走看看