美文网首页
浅谈几个面向对象设计模式

浅谈几个面向对象设计模式

作者: 空生Geek | 来源:发表于2018-09-29 14:59 被阅读0次

面向过程还是面向对象?

面向过程” (Procedure Oriented)是一种以过程为中心的编程思想
面向对象” (Object Oriented,简称OO)是一种以事物为中心的编程思想。

面向过程与面向对象本质的区别在于抽象方式的不同,面向过程抽象的是事物的过程,面向对象抽象的是事物的参与者。相较于面向过程,面向对象更能适应这个复杂多变的世界

什么是模式?

在软件世界中,每个开发机构就像是一个部落,而一个模式就是对部落的某种共同记忆的一种有形表现。

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现实中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因

几个核心

健壮性,高内聚,低耦合,效率,可维护,可扩展,安全性等,参考:设计模式原则

企业模式

  • 视图层包括系统用户实际看到和交互的界面。它负责显示用户请求的结果及传递新的请求给系统
  • 命令和控制层处理用户请求。它委托业务逻辑层处理和满足请求,然后选择最合适的视图显示给用户
  • 业务逻辑层负责根据请求执行业务操作。它执行需要的计算并整理结果数据
  • 数据层负责保存和获取系统中的持久信息
企业模式.png

单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例

单例模式.jpg
 //样例
class Preferences
{

    private static $instance = null;

    private function __construct()
    {
    }

    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new Preferences();
        }
        return self::$instance;
    }

}

观察者模式

观察者模式的核心是把客户元素(观察者)从一个中心类(主体)中分离出来。当主体知道事件发生时,观察者需要被通知到。同时我们并不希望将主体与观察者之间的关系进行硬编码。


观察者模式.jpg
//样例
interface Observable
{
    function attach(Observer $observer);

    function detach(Observer $observer);

    function notify();
}

class Login implements Observable
{
    private $observers;

    //...

    function __construct()
    {
        $this->observers = array();
    }

    function attach(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    function detach(Observer $observer)
    {
        $newobservers = array();
        foreach ($this->observers as $obs) {
            if (($obs !== $observer)) {
                $newobservers[] = $obs;
            }
        }
        $this->observers = $newobservers;
    }

    function notify()
    {
        foreach ($this->observers as $obs) {
            $obs->update($this);
        }
    }

    function handleLogin($user, $pass, $ip)
    {
        //登陆处理
        //...
        $ret = '处理结果';
        $this->notify();
        return $ret;
    }

    function getStatus()
    {
        return $status;//返回状态
    }
}

//...
interface Observer
{
    function update(Obervable $observable);
}

abstract class LoginObserver implements Observer
{
    private $login;

    function __construct(Login $login)
    {
        $this->login = $login;
        $login->attach($this);
    }

    function update(Obervable $observable)
    {
        if ($observable === $this->login) {
            $this->doUpdate($observable);
        }
    }

    abstract function doUpdate(Login $login);
}

class SecurityMonitore extends LoginObserver
{
    function doUpdate(Login $login)
    {
        $status = $login->getStatus();
        //根据状态做相应操作
        //...
    }
}

class GeneralLogger extends LoginObserver
{
    function doUpdate(Login $login)
    {
        $status = $login->getStatus();
        //根据状态做相应操作
        //...
    }
}

class PartnershopTool extends LoginObserver
{
    function doUpdate(Login $login)
    {
        $status = $login->getStatus();
        //根据状态做相应操作
        //...
    }
}

工厂模式

面向对象设计强调“抽象类高于实现”。也就是说我们要尽量一般化而不是特殊化,工厂模式解决了当代码关注于抽象类型时如何创建对象实例的问题。


工厂模式.png
//样例
abstract class ApptEncoder{
    abstract function encode();
}

class BloggsApptEncoder extends ApptEncoder{
    function encode(){
        return "Appointment data encoded in BloggsCal format\n";
    }
}

class MegaApptEncoder extends ApptEncoder{
    function encode(){
        return "Appointment data encoded in MegaCal format\n";
    }
}

class CommsManager{

    const BLOGGS = 1;
    const MEGA = 2;
    private $model = 1;

    function __construct( $model ){
        $this->model = $model;
    }

    function getApptEncoder(){
        switch ( $this->$model ) {
            case ( self::BLOGGS ):
                return new BloggsApptEncoder();
                break;
            default:
                return new MegaApptEncoder();
                break;
        }
    }
}

相关文章

  • 浅谈几个面向对象设计模式

    面向过程还是面向对象? “面向过程” (Procedure Oriented)是一种以过程为中心的编程思想“面向对...

  • PHP 设计模式阅读清单

    社区文章推荐 S.O.L.I.D 面向对象设计和编程(OOD&OOP)笔记 浅谈 Laravel 设计模式 PHP...

  • 浅谈架构-----目录

    浅谈架构——引言 浅谈架构——面向对象 谈架构——文档下载的设计实现

  • 面向对象设计原则

    面向对象设计原则 面向对象设计原则是设计模式的基础,每个设计模式都符合一一种或多种面向对象的设计原则。 常用的面向...

  • 浅谈架构——面向对象

    写在开始:本篇算是浅谈架构系列的正式文章了,计划整个系列文章从面向对象编程开始到设计模式、应用级架构设计模...

  • 单例模式

    面向对象设计的设计模式(四):单例模式

  • GeekBand极客班C++设计模式(一)

    1、设计模式简介 设计模式-不断解决,不必重复推荐书籍-设计模式:可复用面向对象软件的基础面向对象-底层思维:语言...

  • 面向对象:6大原则、24种设计模式

    接上一篇:面向对象介绍 为什么要学设计原则、设计模式? 若不学好经典设计模式,和通过设计模式理解面向对象的原则,你...

  • 要点1 Java相关

    1. 熟练掌握Java技术,熟悉面向对象思想,熟悉常用设计模式; 面向对象思想: 继承, 封装, 多态 设计模式:...

  • 面向指针编程(一)

    面向对象编程,面向设计模式编程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数...

网友评论

      本文标题:浅谈几个面向对象设计模式

      本文链接:https://www.haomeiwen.com/subject/chpvoftx.html