抽象工厂
如mac系统 mac软件 win系统 win软件
可以制作一个win工厂用来生产win软件和win系统
可以制作一个mac工厂生产mac系统,mac软件
<?php
/*
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口。
注意:这里和工厂方法的区别是:一系列,而工厂方法则是一个。
那么,我们是否就可以想到在接口create里再增加创建“一系列”对象的方法呢?
*/
interface people {
function jiehun();
}
class Oman implements people{
function jiehun() {
echo '美女,我送你玫瑰和戒指!<br>';
}
}
class Iman implements people{
function jiehun() {
echo '我偷偷喜欢你<br>';
}
}
class Owomen implements people {
function jiehun() {
echo '我要穿婚纱!<br>';
}
}
class Iwomen implements people {
function jiehun() {
echo '我好害羞哦!!<br>';
}
}
interface createMan { // 注意了,这里是本质区别所在,将对象的创建抽象成一个接口。
function createOpen(); //分为 内敛的和外向的
function createIntro(); //内向
}
class FactoryMan implements createMan{
function createOpen() {
return new Oman;
}
function createIntro() {
return new Iman;
}
}
class FactoryWomen implements createMan {
function createOpen() {
return new Owomen;
}
function createIntro() {
return new Iwomen;
}
}
class Client {
// 抽象方法
function test() {
$Factory = new FactoryMan;
$man = $Factory->createOpen();
$man->jiehun();
$man = $Factory->createIntro();
$man->jiehun();
$Factory = new FactoryWomen;
$man = $Factory->createOpen();
$man->jiehun();
$man = $Factory->createIntro();
$man->jiehun();
}
}
$f = new Client;
$f->test();
简单工厂模式:用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力
工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法简单工厂模式:
工厂类负责创建的对象较少,客户只知道传入工厂类的参数,对于如何创建对象不关心。
工厂方法模式:
当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,当类将创建对象的职责委托给多个帮助子类中得某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候,可以使用工厂方法模式。
抽象工厂模式:
一个系统不应当依赖于产品类实例何如被创建,组合和表达的细节,这对于所有形态的工厂模式都是重要的。这个系统有多于一个的产品族,而系统只消费其 中某一产品族。同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。系统提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于实现。
无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。究竟用哪种设计模式更适合,这要根据具体的业务需求来决定
- 空白目录
- 安装
- linux下安装nginx
- linux下安装php
- 调试
- windows 安装wamp
- 常用源
- 类型
- Boolean布尔类型
- Integer整型
- Float浮点型
- String字符串
- Array数组
- Object对象
- Resource资源类型
- NULL
- Callback/Callable类型
- 类型转换
- 变量
- 预定义变量
- 常量
- 魔术常量(预定义常量)
- 语法
- 运算符
- 流程控制
- 条件语句
- if
- else
- else if/elseif
- switch
- 循环语句
- while
- do-while
- for
- foreach
- break
- return
- continue
- require
- include
- require_once
- include_once
- 函数
- 内置函数
- 匿名函数
- 自定义函数
- 类与对象
- 属性
- 声明
- public
- protected
- private
- 类常量
- 方法
- 魔术方法
- __construct()
- __destruct()
- __call()
- __callStatic()
- __get()
- __set()
- __isset()
- __unset()
- __sleep()
- __wakeup()
- __toString()
- __invoke()
- __set_state()
- __clone()
- __debugInfo()
- 方法的调用
- ->(对象运算符)
- ::(范围解析操作符)
- 设计模式
- 依赖注入
- call_user_func
- is_callable (
- 创建型模式
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 结构性模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
- 行为型模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 访问者模式
- 中介者模式
- 解释器模式
- 六大原则
- uml语言
- 反射
- 类型约束
- 调试
- lamp
- lnmp
- composer
- 工作常用
- UML图
- 常见问题