• 设计模式之(工厂)


    1、简单工厂模式

     简单工厂模式又称为静态工厂方法模式。 他的目的很简单,定义一个用于创建对象的接口

    组成:

    1)工厂类角色

    2)抽象产品角色

    3)具体产品角色

    //抽象产品角色

    public interface Car{
      public void drive();
    }

    //具体产品角色

    public class Benz implements Car{
      public void drive() {
        System.out.println("Driving Benz ");
      }
    }
    public class Bmw implements Car{
      public void drive() {
        System.out.println("Driving Bmw ");
      }
    }

    //工厂类角色

    public class Driver{
    //工厂方法.注意返回类型为抽象产品角色
      public static Car driverCar(String s)throws Exception {
        //判断逻辑,返回具体的产品角色给Client
          if(s.equalsIgnoreCase("Benz"))
            return new Benz();
           else if(s.equalsIgnoreCase("Bmw"))
            return new Bmw();
            ......
           else throw new Exception();
    。。。

    //欢迎暴发户出场......
    public class Magnate{
      public static void main(String[] args){
        try{
          //告诉司机我今天坐奔驰
          Car car = Driver.driverCar("benz");
          //下命令:开车
          car.drive();
          。。。

    首先,使用了简单工厂模式后,我们的程序不在“有病”,更加符合现实中的情况;而且
    客户端免除了直接创建产品对象的责任,而仅仅负责“消费”产品(正如暴发户所为)。

    下面我们从开闭原则(对扩展开放;对修改封闭)上来分析下简单工厂模式。当暴发户
    增加了一辆车的时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客
    户使用了。所以对产品部分来说,它是符合开闭原则的;但是工厂部分好像不太理想,因为
    每增加一辆车,都要在工厂类中增加相应的业务逻辑或者判断逻辑,这显然是违背开闭原则
    的。可想而知对于新产品的加入,工厂类是很被动的。对于这样的工厂类(在我们的例子中
    是为司机师傅),我们称它为全能类或者上帝类。

    2、工厂方法模式

    工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承

    1)抽象工厂角色

    2)具体工厂角色

    3)抽象产品角色

    4)具体产品角色

    //抽象产品角色,具体产品角色与简单工厂模式类似,只是变得复杂了些,这里略。
    //抽象工厂角色
    public interface Driver{
    public Car driverCar();
    }
    public class BenzDriver implements Driver{
    public Car driverCar(){
    return new Benz();
    }
    }
    public class BmwDriver implements Driver{
    public Car driverCar() {
    return new Bmw();
    }
    }
    //应该和具体产品形成对应关系...
    //有请暴发户先生
    public class Magnate
    {
    public static void main(String[] args)
    {
    try{
    Driver driver = new BenzDriver();
    Car car = driver.driverCar();
    car.drive();
    }
    ……

    可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大
    量的与之对应的工厂对象,这不是我们所希望的。因为如果不能避免这种情况,可以考虑使
    用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类
    (一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。

    3、抽象工厂

  • 相关阅读:
    爱她就用python给她画个小心心 ♥(ˆ◡ˆԅ)
    用python画小猪佩奇(非原创)
    (解释文)My SQL中主键为0和主键自排约束的关系
    (细节)My SQL中主键为0和主键自排约束的关系
    My SQL常用操作汇总
    博客搬运同步至腾讯云+社区声明
    mysql在ubuntu中的操作笔记(详)
    vim编辑器操作汇总
    linux常用命令汇总
    在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析
  • 原文地址:https://www.cnblogs.com/yanran/p/5455240.html
Copyright © 2020-2023  润新知