美文网首页
三种工厂模式

三种工厂模式

作者: 吴_旭东 | 来源:发表于2017-07-13 10:39 被阅读0次

    简单工厂模式

    • 优:客户端避免创建产品对象,而只是使用产品。
    • 劣:产品需要符合开闭原则(对修改封闭,对拓展开放),简单工厂并不符合开闭原则。只有一个工厂类角色,当产品是多层次树状结构,工厂类不方便维护。
    //抽象产品角色
    interface Car {
        void drive();
    }
    // 具体产品角色
    class Benz implements Car {
        public void drive() {
            System.out.println("Car Benz is starting");
        }
    }
    class Bmw implements Car {
        public void drive() {
            System.out.println("Car Bmw is starting");
        }
    }
    // 工厂类角色
    class Driver {
        public static Car driverCar(String string) throws Exception {
            if (string.equalsIgnoreCase("Benz")) {
                return new Benz();
            } else if (string.equalsIgnoreCase("Bmw")) {
                return new Bmw();
            } else {
                throw new Exception();
            }
        }
    
    }
    
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            try {
                Car car = Driver.driverCar("Benz");
                car.drive();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
                
        }
    

    工厂方法模式

    • 优:产品和工厂都符合开闭原则
    • 劣:当产品种类多的时候,工厂对象也会相应的增加。
    //抽象工厂角色
    interface Driver{
       Car driverCar();
    }
    
    // 工厂类角色
    class BenzDriver implements Driver{
      public Car driverCar(){
          return new Benz();
      }
    }
    class BmwDriver implements Driver{
      public Car driverCar(){
          return new Bmw();
      }
    }
    
    //使用者
    public static void main(String[] args) {
          // TODO Auto-generated method stub
          try {
              Driver driver = new BenzDriver();
              Car car = driver.driverCar();
              car.drive();
          } catch (Exception e) {
              // TODO: handle exception
              e.printStackTrace();
          }
              
      }
    

    抽象工厂模式(对对象进行抽象)

    • 优:抽象工厂模式可以面对多个产品等级结构。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
    • 劣:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
    //抽象工厂
    public abstract class AbstractFactory {
           public abstract Car getCar(String car);
           public abstract Tire getTire(String tire);
    }
    /*****************************/
    //抽象产品 轮胎
    public interface Tire {
       void train();
    }
    //抽象产品
    public interface Car {
       void drive();
    }
    /*****************************/
    //实体类 子午线轮胎
    public class RadialTire implements Tire {
       @Override
       public void train() {
           // TODO: 2019-08-19
       }
    }
    //实体类 防滑轮胎
    public class AntiskidTire implements Tire {
       @Override
       public void train() {
           // TODO: 2019-08-19  
       }
    }
    /*****************************/
    //创建实现接口的实体类
    public class Benz implements Car {
       @Override
       public void drive() {
               //todo Benz created
       }
    }
    //创建实现接口的实体类
    public class Audi implements Car {
       @Override
       public void drive() {
           //todo Audi created
       }
    }
    /*****************************/
    //创建一个工厂创造器
    public class FactoryProducer {
       public static AbstractFactory getFactory(String choice) {
           if (choice.equalsIgnoreCase("CAR")) {
               return new CarFactory();
           } else if (choice.equalsIgnoreCase("TIRE")) {
               return new TireFactory();
           }
           return null;
       }
    }
    

    相关文章

      网友评论

          本文标题:三种工厂模式

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