zoukankan      html  css  js  c++  java
  • 设计模式

    简介

    产品等级结构和产品族

    • 产品等级结构 :产品的继承结构。对于电视机,有海尔、海信、TCL 等品牌,抽象电视机与具体品牌的电视机之间构成了一个产品等级结构。
    • 产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔工厂生产的电视机、电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

    工厂方法模式中,一个具体工厂只生产一种产品。当工厂所生产的具体产品位于多个不同的产品等级结构中时,需要使用抽象工厂模式。

    在所有的工厂模式中,抽象工厂模式最为抽象,最具一般性。

    模式定义

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

    模式特点

    抽象工厂模式包含四个角色:

    • Product:抽象产品
    • ConcreteProduct:具体产品
    • Factory:抽象工厂
    • ConcreteFactory:具体工厂

    这里写图片描述

    优缺点

    • 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
    • 添加新产品时,需要修改抽象工厂及所有的工厂来添加这个产品(开闭原则的倾斜性,增加新的工厂和产品族容易,增加新的产品等级结构麻烦)。

    PHP 代码示例

    <?php
    
    abstract class AbstractFactory
    {
        abstract function makeTV();
        abstract function makeCamera();
    }
    
    class TCLFactory
    {
        function makeTV() {
            return new TCLTV();
        }
        function makeCamera() {
            return new TCLCamera();
        }
    }
    class HaiXinFactory
    {
        function makeTV() {
            return new HaiXinTV();
        }
        function makeCamera() {
            return new HaiXinCamera();
        }
    }
    
    abstract class AbstractTV
    {
        abstract function f1();
    }
    class TCLTV extends AbstractTV
    {
        function f1() {
            echo "This is TCL TV";
        }
    }
    class HaiXinTV extends AbstractTV
    {
        function f1() {
            echo "This is HaiXin TV";
        }
    }
    
    abstract class AbstractCamera
    {
        abstract function f1();
    }
    class TCLCamera extends AbstractCamera
    {
        function f1() {
            echo "This is TCL Camera";
        }
    }
    class HaiXinCamera extends AbstractCamera
    {
        function f1() {
            echo "This is HaiXin Camera";
        }
    }
    
    $TCLFactory = new TCLFactory();
    $TCLTV = $TCLFactory->makeTV();
    $TCLCamera = $TCLFactory->makeCamera();
    
    $TCLTV->f1();
    $TCLCamera->f1();
  • 相关阅读:
    JAVA网络编程入门
    悲观锁和乐观锁
    原子性---Atomic
    volatile关键字
    leetcode_111. 二叉树的最小深度
    leetcode_110. 平衡二叉树
    leetcode_108. 将有序数组转换为二叉搜索树
    leetcode_107. 二叉树的层次遍历 II
    leetcode_104. 二叉树的最大深度
    leetcode_101. 对称二叉树
  • 原文地址:https://www.cnblogs.com/kika/p/10851575.html
Copyright © 2011-2022 走看看