结构图
2020-11-16 09:36:00 0 举报
结构图
作者其他创作
大纲/内容
实现接口区(可选实现)
继承抽象方法区(完全继承)
使用
类
门和警报的例子说明:门都有open( )和close( )两个动作如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路: 1)将这三个功能都放在抽象类里面,但是这样所有继承于这个抽象类的门都具有了报警功能,但是有些门并不一定具备报警功能; 2)将这三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的open( )和close( ),也许这个类根本就不具备open( )和close( )这两个功能,比如火灾报警器。 从这里可以看出, Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。
abstract class Door { public abstract void open(); public abstract void close();}
普通门 消防门
实现
容器提供者1
类AA
fun1();fun2();
接口A
interface Alram { void alarm();}
class C{ public static function main(){ $b= new B(); $b-method(new Obj3()); } }
【中间件使用关系图】
定义接口
继承
config/app.phpproviders => [ ]
服务容器
注入进来
【类、服务提供者和服务容器的关系图】
或者直接这样用:$b = new B();$b-method(new Obj3());
Apater转换器
private $apater;function __constructor(B $bbObj){ $this->apater = $bbObj}//转换:让fun1=BB实例的fang1public function fun1() { return $this->apater->fang1();}public function fun2(){}
Obj2 implements B{ method2();}
定义中间件
注入对象并使用其方法
……
类BB
fang1();fang2();
【抽象类&接口的关系示例图】
容器提供者2
C::main();
接口B
Obj3 implements C{ method1(); method2(); method3();}
Obj1 implements A{ method1();}
class A{ private $obj; public function __construct( C $obj){ $this-obj = $obj; //赋值给属性 } public function method(){ $this-obj-method1(); $this-obj-method2(); }}class B{ public function method(C $obj){ $obj-method1(); $obj-method2(); }}
【转换器模式Demo】
注册
实现接口
0 条评论
下一页