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();
  • 相关阅读:
    Android 网络框架学习之Retrofit,androidretrofit
    Android 应用APP加入聊天功能
    Mybatis 数据库物理分页插件 PageHelper
    mvn常用命令
    执行第一maven用例出错:Unknown lifecycle phase "complile".
    Mybatis分页插件
    ViewHolder模式超简洁写法
    android网络框架Retrofit 同步异步
    严苛模式(StrictMode)
    使用PF_PACKET和SOCK_RAW发送自己定义type以太网数据包
  • 原文地址:https://www.cnblogs.com/kika/p/10851575.html
Copyright © 2011-2022 走看看