• php设计模式---抽象模式模式


    代码结构图:



    //抽象工厂定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类(官方定义看着真蛋疼 自行百度理解吧 ^_^)
    //需求:不同的数据库sql写法不一样,实现从不同数据库获取用户和新增用户,获取部门和新增部门

    //用户表 抽象产品a
    class user{

    }
    //部门表 抽象产品b
    class department{

    }

    //用于解耦 定义具体抽象产品的接口
    interface Iuser{
    public function insert(user $user);
    public function getUser($id);
    }

    class mysqlUser implements Iuser{
    public function insert(user $user){
    echo '在mysql中给user表增加一条记录<br/>';
    }
    public function getUser($id){
    echo '在mysql中根据id得到user表的一条记录<br/>';
    }
    }

    class sqlserverUser implements Iuser{
    public function insert(user $user){
    echo '在sqlserve中给user表增加一条记录<br/>';
    }
    public function getUser($id){
    echo '在sqlserve中根据id得到user表的一条记录<br/>';
    }
    }


    //部门解耦 定义具体抽象产品的接口
    interface IDepartment{
    public function insert(department $d);
    public function getDepartment($id);
    }
    class mysqlDepartment implements IDepartment{
    public function insert(department $d){
    echo '在mysql中给department表增加一条记录<br/>';
    }
    public function getDepartment($id){
    echo '在mysql中根据id得到department表的一条记录<br/>';
    }
    }

    class sqlserverDepartment implements IDepartment{
    public function insert(department $d){
    echo '在sqlserver中给department表增加一条记录<br/>';
    }
    public function getDepartment($id){
    echo '在sqlserver中根据id得到department表的一条记录<br/>';
    }
    }

    //工厂方法
    interface factory{
    public function createUser();
    public function createDepartment();
    }

    //具体工厂类
    class mysqlFactory implements factory{
    public function createUser(){
    return new mysqlUser();
    }
    public function createDepartment(){
    return new mysqlDepartment();
    }
    }


    //具体工厂类
    class sqlserverFactory implements factory{
    public function createUser(){
    return new sqlserverUser();
    }
    public function createDepartment(){
    return new sqlserverDepartment();
    }
    }

    //客户端
    class client{
    public function show(){
    $user = new user(); //用户表
    $dept = new department(); //部门表

    $factory = new mysqlFactory(); //mysql具体工厂类 以后切换仅仅修改此处的工厂类就好 多么简单
    $u = $factory->createUser();
    $u->insert($user);
    $u->getUser(1);

    $d = $factory->createDepartment();
    $d->insert($dept);
    $d->getDepartment(1);
    }
    }

    $n = new client();
    $n->show();

    所有原创博客均已经过本人验证,本人才疏学浅,刚开始写博客 希望大家多多支持 有问题的地方请指出 我及时改正





    疯子在左,天才在右
  • 相关阅读:
    路由懒加载
    Generator函数
    属性特性get/set
    审核功能
    纯js实现最简单的文件上传(后台使用MultipartFile)
    shiro+redis多次调用doReadSession方法的解决方案
    nginx-windows版
    Spring—Quartz定时调度CronTrigger时间配置格式说明与实例
    java中获取文件目录
    mysql 在update中实现子查询的方式
  • 原文地址:https://www.cnblogs.com/zilixiang/p/8404460.html
Copyright © 2020-2023  润新知