Vit*_*lyP 0 php oop design-patterns
我的数据库中有一个名为posts的表.每个帖子都有一个名为social_network的字段
当我在代码中将所有帖子都放入数组时,我需要根据它的social_network字段为每个帖子创建实例.
现在我使用switch语句,但我不喜欢它,因为它不灵活.
$posts = DataBase::getPosts(); // pseudocode
foreach($posts as $post) {
switch($post->getSocialNetwork()){
case 'Facebook':
$social = new FacebookPost($post->getId());
break;
case 'Twitter':
$social = new TwitterPost($post->getId());
break;
// .... other social networks
}
}
Run Code Online (Sandbox Code Playgroud)
添加一个接口到FacebookPost和TwitterPost类(例如SocialPostInterface),它已经定义了相同的基本必要方法getId(),postToNetwork()然后您可以添加任意数量的新社交网络,而无需更改这段代码.他们只需实现界面
然后体验多态性的力量:
foreach ($posts as $post) {
$className = $post->getSocialNetwork() . 'Post';
// lets check if such class exists
if (!class_exists($className, false /* do not attempt autoload */)) {
throw new Exception("Unknown social network post class $className");
}
$social = new $className($post->getId());
$social->doSomeStuffThatTheInterfaceHasDeclared();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |